我计划用Django Rest框架构建一个应用程序。我更感兴趣的是使用Django-Rest-Framework身份验证机制,而不是会话或令牌身份验证机制。
但其他所有包,如Django-Rest和Djoser (帮助注册过程)都使用会话和令牌身份验证系统。
如何在Djoser或Django-Rest-Auth和Django-Rest-Framework-JWT中覆盖令牌身份验证机制
发布于 2016-03-22 22:05:50
我知道这个问题已经存在了将近一年,但我刚刚想出了如何让django-rest-knox和Djoser合作,而且同样的技术也适用于djangorestframework-jwt。诀窍是知道,您可以使用Djoser的帐户端点,而无需使用其与auth相关的端点。您只需将每个库放在自己的端点上即可。
下面是我如何设置Django Rest框架以使用JWT登录并对Djoser端点进行身份验证(我将从开始到结束):
首先,安装djangorestframework-jwt和djoser
pip install djangorestframework-jwt djoser通过将JSONWebTokenAuthentication添加到Django项目的DEFAULT_AUTHENTICATION_CLASSES中,指定要使用JWT进行身份验证
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
}接下来,将djoser.urls和rest_framework的obtain_jwt_token视图添加到urls中:
from django.conf.urls import url, include
from rest_framework_jwt import views as jwt_views
urlpatterns = [
url(r'^account/', include('djoser.urls')),
url(r'^auth/login/', jwt_views.obtain_jwt_token, name='auth'),
]这应该是你开始工作所需要的一切。为了安全起见,运行一个migrate (我为这篇文章提供了一个全新的Django Rest框架实例,在此之前还没有运行初始提交):
python manage.py migrate若要测试,请创建一个新用户,如果您还没有这样的用户:
python manage.py createsuperuser一旦您有了一个用户帐户,runserver,然后尝试登录以获得您的JWT:
http POST http://localhost:800/auth/login/ username=admin password=password
你应该拿回一个记号:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTg2ODI3MzYsInVzZXJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IiIsInVzZXJfaWQiOjJ9.JDoVCpfiE0uGhsv9OQfPgPc-wxjjQtcEjwAI6bTLWRM"
}然后,您可以使用此令牌对Djoser的/me/端点进行身份验证,以获取配置文件信息。只需将令牌作为授权包含在请求的标头中: JWT
http http://localhost:8000/account/me/“授权: JWT http://localhost:8000/account/me/
我得到的是:
{
"email": "",
"id": 2,
"username": "admin"
}如您所见,开始使用JWT进行身份验证非常容易。我的猜测是,像djoser和这样的库侧重于Basic、Session或令牌身份验证,因为它们包含在DRF框之外,因此可能是人们对服务器上的调用进行身份验证的最常见方法。
所有这些的优点在于,实现更安全的身份验证方案很容易,因为Djoser并没有与自己的身份验证类紧密耦合--它将很高兴地尊重您为DEFAULT_AUTHENTICATION_CLASSES设置的任何内容。
https://stackoverflow.com/questions/29939042
复制相似问题