【发布时间】:2013-07-07 18:26:11
【问题描述】:
我有一个django项目,使用django-rest-framework来创建api。
想要使用基于令牌的身份验证系统,因此(放置、发布、删除)的 api 调用只会为授权用户执行。
我安装了“rest_framework.authtoken”并为每个用户创建了令牌。
所以,现在从 django.contrib.auth.backends 进行身份验证,它返回用户,以 auth_token 作为属性。 (登录成功时)。
现在我的问题是如何将带有 post 请求的令牌发送到我的 api 和 在 api 端如何验证令牌是否有效并且属于正确的用户?
应用程序 rest_framework.authtoken 中是否有任何方法可以验证给定用户及其令牌? 没找到this很有用!
更新(我所做的更改): 在我的 settings.py 中添加了这个:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
)
}
也在我的标头中发送令牌,但它仍然无法正常工作:
if new_form.is_valid:
payload= {"createNewUser":
{ "users": request.POST["newusers"],
"email": request.POST["newemail"]
}
}
headers = {'content-type' : 'application/json',
'Authorization': 'Token 6b929e47f278068fe6ac8235cda09707a3aa7ba1'}
r = requests.post('http://localhost:8000/api/v1.0/user_list',
data=json.dumps(payload),
headers=headers, verify=False)
【问题讨论】:
-
没有那个帖子只谈论创建令牌 - 我已经完成了那部分,现在想知道如何通过 http 请求传递令牌以及如何验证给定用户及其令牌。没有人谈论那部分。
-
它在 django-rest-framework 文档中有很好的记录。在客户端,您只需将标头添加到所有 HTTP 请求,django-rest-framework 在服务器端完成其余工作。如果提供了有效的令牌,您将拥有正确的用户 request.user
-
您需要对象级别的权限(经过身份验证的用户可以 POST/DELETE 自己的模型实例)还是只需要请求级别的权限(经过身份验证的用户可以执行任何 DELETE/POST)?
-
只是请求级别(经过身份验证的用户可以执行任何 DELETE/POST)并且我正在检查 request.user.is_staff 与否
标签: python django django-authentication django-rest-framework