3

我正在使用 DRF 和 Angular,其客户端环境是移动设备。

我发现了一个 django-rest-auth包。

我毫不犹豫地选择了它,因为它提供了 TokenAuthentication 功能,它适用于移动客户端。

当我发送登录请求时,客户端会收到一个令牌。

在此处输入图像描述 然后,我在请求成功回调中添加了一个波纹管。

 login: function(username, password) {
        return $http.post('http://192.168.0.3:8000/rest-auth/login/', {
            'username':username,
            'password':password,
        }).success(function(data) {
            $http.defaults.headers.common.Authorization = 'Token ' + data.key;
            Account.authenticated = true;
            console.log("login success", data)
        })

在服务器的控制台,关于传入请求的输出如下

'HTTP_AUTHORIZATION': 'Token 3fae470d169adb550e538c99a754fcfbe3485f75'

但是,我看到了一个意想不到的结果,像这样:

request.user AnonymousUser
request.auth None

根据这里,如果我发送带有令牌的请求,那么额外的身份验证工作将自行处理。

我应该添加其他代码来完成身份验证吗?

(例如,将令牌注册到 django 的会话存储中。)

我想听听你的建议。

4

1 回答 1

3

我解决了一个问题,原因只是愚蠢的错误

我没有仔细看参考文件。

要使用 TokenAuthentication 方案,您需要配置身份验证类以包含 TokenAuthentication,并在 INSTALLED_APPS 设置中另外包含 rest_framework.authtoken:

所以我在settings.py中添加了配置。

 REST_FRAMEWORK = {
     'DEFAULT_AUTHENTICATION_CLASSES': (
         'rest_framework.authentication.BasicAuthentication',
         'rest_framework.authentication.SessionAuthentication',

         # I add this config
         'rest_framework.authentication.TokenAuthentication',
     )
}

向服务器发送登录请求终端后,如果我使用“GET”请求,终端控制台输出如下所示。

request.user admin

request.auth 626ba4b1357cb472fc4bb0c58afb026cf21dd175

于 2015-01-28T08:35:39.627 回答