首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DRF:如何将django-rest-framework-jwt集成到Djoser

DRF:如何将django-rest-framework-jwt集成到Djoser
EN

Stack Overflow用户
提问于 2015-04-29 09:04:44
回答 1查看 5.6K关注 0票数 10

我计划用Django Rest框架构建一个应用程序。我更感兴趣的是使用Django-Rest-Framework身份验证机制,而不是会话或令牌身份验证机制。

但其他所有包,如Django-Rest和Djoser (帮助注册过程)都使用会话和令牌身份验证系统。

如何在Djoser或Django-Rest-Auth和Django-Rest-Framework-JWT中覆盖令牌身份验证机制

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-22 22:05:50

我知道这个问题已经存在了将近一年,但我刚刚想出了如何让django-rest-knoxDjoser合作,而且同样的技术也适用于djangorestframework-jwt。诀窍是知道,您可以使用Djoser的帐户端点,而无需使用其与auth相关的端点。您只需将每个库放在自己的端点上即可。

下面是我如何设置Django Rest框架以使用JWT登录并对Djoser端点进行身份验证(我将从开始到结束):

首先,安装djangorestframework-jwtdjoser

代码语言:javascript
复制
pip install djangorestframework-jwt djoser

通过将JSONWebTokenAuthentication添加到Django项目的DEFAULT_AUTHENTICATION_CLASSES中,指定要使用JWT进行身份验证

代码语言:javascript
复制
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中:

代码语言:javascript
复制
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框架实例,在此之前还没有运行初始提交):

代码语言:javascript
复制
python manage.py migrate

若要测试,请创建一个新用户,如果您还没有这样的用户:

代码语言:javascript
复制
python manage.py createsuperuser

一旦您有了一个用户帐户,runserver,然后尝试登录以获得您的JWT:

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

你应该拿回一个记号:

代码语言:javascript
复制
{
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTg2ODI3MzYsInVzZXJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IiIsInVzZXJfaWQiOjJ9.JDoVCpfiE0uGhsv9OQfPgPc-wxjjQtcEjwAI6bTLWRM"
}

然后,您可以使用此令牌对Djoser的/me/端点进行身份验证,以获取配置文件信息。只需将令牌作为授权包含在请求的标头中: JWT

http http://localhost:8000/account/me/“授权: JWT http://localhost:8000/account/me/

我得到的是:

代码语言:javascript
复制
{
    "email": "",
    "id": 2,
    "username": "admin"
}

如您所见,开始使用JWT进行身份验证非常容易。我的猜测是,像djoser和这样的库侧重于Basic、Session或令牌身份验证,因为它们包含在DRF框之外,因此可能是人们对服务器上的调用进行身份验证的最常见方法。

所有这些的优点在于,实现更安全的身份验证方案很容易,因为Djoser并没有与自己的身份验证类紧密耦合--它将很高兴地尊重您为DEFAULT_AUTHENTICATION_CLASSES设置的任何内容。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29939042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档