我使用的是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
根据here,如果我发送带令牌的请求,将自行处理哪些额外的身份验证。
我应该添加其他代码以进行完整身份验证吗?
(例如,将令牌注册到django的会话存储中。)
我想听听你的意见。
答案 0 :(得分:2)
我解决了一个问题,原因只是愚蠢的错误
我没有仔细查看reference documents.
要使用TokenAuthentication方案,您需要configure the authentication classes包含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