Django REST框架+ Angular项目上的令牌认证
Posted
技术标签:
【中文标题】Django REST框架+ Angular项目上的令牌认证【英文标题】:token authentication on Django REST framework + Angular project 【发布时间】:2015-03-25 13:30:20 【问题描述】:我正在使用 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 的会话存储中。)
我想听听你的建议。
【问题讨论】:
【参考方案1】:我解决了一个问题,原因只是愚蠢的错误
我没仔细看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
【讨论】:
以上是关于Django REST框架+ Angular项目上的令牌认证的主要内容,如果未能解决你的问题,请参考以下文章
Angular 2 前端 django 2 REST 框架后端用户身份验证
Angular 4 对 Django Rest 框架的 HTTP 请求
如何从 django rest 框架访问 jwt 令牌到 Angular 前端