DRF:如何将 django-rest-framework-jwt 集成到 Djoser
DRF: how to integrate django-rest-framework-jwt to Djoser
我计划使用 Django Rest Framework 构建一个应用程序。我对使用 Django-Rest-Framework-JWT 身份验证机制比 Session 或 Token 更感兴趣认证机制。
但是所有其他软件包,如 Django-Rest-Auth 和 Djoser(有助于注册过程)使用会话和令牌身份验证系统.
如何使用 Django-Rest 覆盖 Djoser 或 Django-Rest-Auth 中的令牌身份验证机制-框架-JWT?
我知道这个问题差不多一年了,但我只是想出了如何获得 Djoser 和 django-rest-knox一起玩,果然同样的技术也适用于 djangorestframework-jwt。诀窍是知道您可以使用 Djoser 的帐户端点而不使用其与身份验证相关的端点。您只需将每个库放在自己的端点上。
以下是我如何设置 Django Rest Framework 以使用 JWT 登录并针对 Djoser 端点进行身份验证(我将从头到尾介绍它):
首先,安装djangorestframework-jwt和djoser:
pip install djangorestframework-jwt djoser
通过在 Django 项目的 settings.py
:
中将 JSONWebTokenAuthentication
添加到 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_jwt 的 obtain_jwt_token
视图添加到您的网址:
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'),
]
这应该是您入门所需的一切。为了安全起见,运行 a migrate
(我为此 post 启动了一个全新的 Django Rest Framework 实例并且还没有 运行 之前的初始提交这点):
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/ 端点进行身份验证以获取您的个人资料信息。只需将您的令牌作为 Authorization: JWT:
http http://localhost:8000/account/me/ "Authorization: JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTg2ODI3MzYsInVzZXJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IiIsInVzZXJfaWQiOjJ9.JDoVCpfiE0uGhsv9OQfPgPc-wxjjQtcEjwAI6bTLWRM"
这是我得到的结果:
{
"email": "",
"id": 2,
"username": "admin"
}
如您所见,开始使用 JWT 进行身份验证非常容易。我的猜测是 djoser 和 django-rest-auth 等库专注于 Basic、Session 或 Token 身份验证,因为它们包含在DRF 框,因此可能是人们验证针对其服务器的调用的最常用方法。
所有这一切的美妙之处在于,它很容易实现更安全的身份验证方案,因为 Djoser 与它自己的身份验证没有紧密耦合 类 - 它会很乐意尊重你为 [=18 设置的任何内容=].
我计划使用 Django Rest Framework 构建一个应用程序。我对使用 Django-Rest-Framework-JWT 身份验证机制比 Session 或 Token 更感兴趣认证机制。
但是所有其他软件包,如 Django-Rest-Auth 和 Djoser(有助于注册过程)使用会话和令牌身份验证系统.
如何使用 Django-Rest 覆盖 Djoser 或 Django-Rest-Auth 中的令牌身份验证机制-框架-JWT?
我知道这个问题差不多一年了,但我只是想出了如何获得 Djoser 和 django-rest-knox一起玩,果然同样的技术也适用于 djangorestframework-jwt。诀窍是知道您可以使用 Djoser 的帐户端点而不使用其与身份验证相关的端点。您只需将每个库放在自己的端点上。
以下是我如何设置 Django Rest Framework 以使用 JWT 登录并针对 Djoser 端点进行身份验证(我将从头到尾介绍它):
首先,安装djangorestframework-jwt和djoser:
pip install djangorestframework-jwt djoser
通过在 Django 项目的 settings.py
:
JSONWebTokenAuthentication
添加到 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_jwt 的 obtain_jwt_token
视图添加到您的网址:
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'),
]
这应该是您入门所需的一切。为了安全起见,运行 a migrate
(我为此 post 启动了一个全新的 Django Rest Framework 实例并且还没有 运行 之前的初始提交这点):
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/ 端点进行身份验证以获取您的个人资料信息。只需将您的令牌作为 Authorization: JWT:
http http://localhost:8000/account/me/ "Authorization: JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTg2ODI3MzYsInVzZXJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IiIsInVzZXJfaWQiOjJ9.JDoVCpfiE0uGhsv9OQfPgPc-wxjjQtcEjwAI6bTLWRM"
这是我得到的结果:
{
"email": "",
"id": 2,
"username": "admin"
}
如您所见,开始使用 JWT 进行身份验证非常容易。我的猜测是 djoser 和 django-rest-auth 等库专注于 Basic、Session 或 Token 身份验证,因为它们包含在DRF 框,因此可能是人们验证针对其服务器的调用的最常用方法。
所有这一切的美妙之处在于,它很容易实现更安全的身份验证方案,因为 Djoser 与它自己的身份验证没有紧密耦合 类 - 它会很乐意尊重你为 [=18 设置的任何内容=].