我打算用 Django Rest Framework 构建一个应用程序。我对使用 Django-Rest-Framework-JWT 认证机制比 Session 或 Token 认证机制更感兴趣。
但所有其他软件包,如 Django-Rest-Auth 和 Djoser (有助于注册过程)都使用会话和令牌认证系统。
如何使用 Django-Rest-Framework-JWT 覆盖 Djoser 或 Django-Rest-Auth 中的令牌认证机制?< / p>
答案 0 :(得分:13)
我知道这个问题差不多已经有一年了,但我只是想出了如何让 Djoser 和 django-rest-knox 一起玩,当然也是如此技术也适用于 djangorestframework-jwt 。诀窍是知道您可以使用Djoser的帐户端点而不使用其与身份验证相关的端点。您只需将每个库放在自己的端点上。
以下是我如何设置Django Rest Framework以使用JWT登录并对Djoser端点进行身份验证(我将从头到尾接受它):
首先,安装 djangorestframework-jwt 和 djoser :
pip install djangorestframework-jwt djoser
通过在Django项目JSONWebTokenAuthentication
DEFAULT_AUTHENTICATION_CLASSES
中向settings.py
添加REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
}
来指定您要使用JWT进行身份验证:
djoser.urls
接下来,将obtain_jwt_token
和rest_framework_jwt的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
这应该是您开始所需的一切。为了安全起见,运行一个python manage.py migrate
(我为这篇文章创建了一个全新的Django Rest Framework实例,并且还没有在此之前运行初始提交):
python manage.py createsuperuser
要测试一下,如果您还没有新用户,请创建一个新用户:
runserver
拥有用户帐户{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTg2ODI3MzYsInVzZXJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IiIsInVzZXJfaWQiOjJ9.JDoVCpfiE0uGhsv9OQfPgPc-wxjjQtcEjwAI6bTLWRM"
}
,然后尝试登录以获取JWT:
http POST http://localhost:800/auth/login/ username = admin password = password
你应该回来一个令牌:
{
"email": "",
"id": 2,
"username": "admin"
}
然后,您可以使用此令牌对Djoser的 / me / 端点进行身份验证,以获取您的个人资料信息。只需将您的令牌包含在您的请求标题中授权:JWT :
HTTP http://localhost:8000/account/me/&#34;授权:JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTg2ODI3MzYsInVzZXJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IiIsInVzZXJfaWQiOjJ9.JDoVCpfiE0uGhsv9OQfPgPc-wxjjQtcEjwAI6bTLWRM&#34;
这是我得到的:
DEFAULT_AUTHENTICATION_CLASSES
正如您所看到的,开始使用JWT进行身份验证非常容易。我的猜测是像 djoser 和 django-rest-auth 这样的库专注于基本,会话或令牌身份验证,因为它们被包含在DRF框中,因此可能是人们对其服务器进行身份验证的最常用方法。
所有这一切的美妙之处在于,实现更安全的身份验证方案很容易,因为Djoser并没有与自己的身份验证类紧密耦合 - 它会高兴地尊重您为{设置的任何内容{1}}。