gpt4 book ai didi

django - DRF : how to integrate django-rest-framework-jwt to Djoser

转载 作者:行者123 更新时间:2023-12-04 10:17:14 25 4
gpt4 key购买 nike

我正计划使用Django Rest Framework构建应用程序。我对使用Django-Rest-Framework-JWT身份验证机制比对 session 或 token 身份验证机制更感兴趣。

但是所有其他软件包,例如Django-Rest-Auth和Djoser(有助于注册过程)都使用 session 和 token 认证系统。

如何使用Django-Rest-Framework-JWT覆盖Djoser或Django-Rest-Auth中的 token 认证机制?

最佳答案

我知道这个问题已经存在了将近一年,但是我只是想出了如何让 djangorestframework-jwt Djoser django-rest-knox 一起使用。诀窍在于,您可以使用来使用Djoser的帐户端点,而无需使用其与身份验证相关的端点。您只需要将每个库放在其自己的端点上即可。

这是我设置Django Rest Framework的方式,以使用JWT登录并针对Djoser端点进行身份验证(我将从头至尾进行介绍):

首先,安装 djangorestframework-jwt djoser :

pip install djangorestframework-jwt djoser

通过在Django项目的 JSONWebTokenAuthentication中的 DEFAULT_AUTHENTICATION_CLASSES中添加 settings.py,以指定要使用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 View 添加到您的网址中:
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 Framework的一个全新实例,但在此之前尚未运行初始提交):
python manage.py migrate

要进行测试,请创建一个新用户(如果您还没有):
python manage.py createsuperuser

拥有用户帐户后,请输入 runserver,然后尝试登录以获取JWT:

http POST http://localhost:800/auth/login/ username=admin password=password



您应该找回 token :
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTg2ODI3MzYsInVzZXJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IiIsInVzZXJfaWQiOjJ9.JDoVCpfiE0uGhsv9OQfPgPc-wxjjQtcEjwAI6bTLWRM"
}

然后,您可以使用此 token 对Djoser的 /me/端点进行身份验证,以获取您的个人资料信息。只需将 token 作为 包括在请求的 header 中即可:JWT :

http http://localhost:8000/account/me/ "Authorization: JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTg2ODI3MzYsInVzZXJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IiIsInVzZXJfaWQiOjJ9.JDoVCpfiE0uGhsv9OQfPgPc-wxjjQtcEjwAI6bTLWRM"



这是我回来的东西:
{
"email": "",
"id": 2,
"username": "admin"
}

如您所见,开始使用JWT进行身份验证非常简单。我的猜测是,像 djoser django-rest-auth 之类的库都集中在基本身份验证, session 身份验证或 token 身份验证上,因为它们不包含在DRF框内,因此可能是人们对调用进行身份验证的最常用方法他们的服务器。

所有这一切的优点在于,由于Djoser并未与其自身的身份验证类紧密耦合,因此易于实现更安全的身份验证方案-它会很高兴地尊重您为 DEFAULT_AUTHENTICATION_CLASSES设置的内容。

关于django - DRF : how to integrate django-rest-framework-jwt to Djoser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29939042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com