rest_framework_simplejwt怎么配置使用

时间: 2023-05-11 14:06:05 浏览: 37
要使用rest_framework_simplejwt,您需要在settings.py文件中进行以下配置: 1. 添加'rest_framework_simplejwt.authentication.JWTAuthentication'到REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES']中。 2. 添加以下设置: SIMPLE_JWT = { 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5), 'REFRESH_TOKEN_LIFETIME': timedelta(days=1), 'ROTATE_REFRESH_TOKENS': False, 'BLACKLIST_AFTER_ROTATION': True, 'UPDATE_LAST_LOGIN': False, 'ALGORITHM': 'HS256', 'SIGNING_KEY': settings.SECRET_KEY, 'VERIFYING_KEY': None, 'AUDIENCE': None, 'ISSUER': None, 'AUTH_HEADER_TYPES': ('Bearer',), 'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION', 'USER_ID_FIELD': 'id', 'USER_ID_CLAIM': 'user_id', 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',), 'TOKEN_TYPE_CLAIM': 'token_type', 'JTI_CLAIM': 'jti', 'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp', 'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5), 'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1), } 3. 在urls.py文件中添加以下代码: from rest_framework_simplejwt.views import ( TokenObtainPairView, TokenRefreshView, TokenVerifyView, ) urlpatterns = [ path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), path('api/token/verify/', TokenVerifyView.as_view(), name='token_verify'), ] 这样就可以使用rest_framework_simplejwt了。

相关推荐

好的,下面是基于Python Django和JWT的Web用户管理系统的开发步骤: 1. 创建Django项目 在命令行中输入以下命令来创建Django项目: django-admin startproject user_management_system 2. 创建Django应用程序 在命令行中输入以下命令来创建Django应用程序: python manage.py startapp users 3. 配置Django应用程序 在settings.py文件中添加以下应用程序和数据库的配置: python INSTALLED_APPS = [ 'users', 'rest_framework', 'rest_framework.authtoken', ] DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'user_management_system', 'USER': 'postgres', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '5432', } } 4. 创建模型 在models.py文件中创建用户模型: python from django.db import models from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin class UserManager(BaseUserManager): def create_user(self, email, password=None): if not email: raise ValueError('Users must have an email address') user = self.model( email=self.normalize_email(email), ) user.set_password(password) user.save(using=self._db) return user def create_superuser(self, email, password): user = self.create_user( email, password=password, ) user.is_admin = True user.save(using=self._db) return user class User(AbstractBaseUser, PermissionsMixin): email = models.EmailField( verbose_name='email address', max_length=255, unique=True, ) is_active = models.BooleanField(default=True) is_admin = models.BooleanField(default=False) objects = UserManager() USERNAME_FIELD = 'email' REQUIRED_FIELDS = [] def __str__(self): return self.email def has_perm(self, perm, obj=None): return True def has_module_perms(self, app_label): return True @property def is_staff(self): return self.is_admin 5. 配置REST框架 在settings.py文件中添加以下REST框架的配置: python REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.TokenAuthentication', 'rest_framework_simplejwt.authentication.JWTAuthentication', ), 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', ), } 6. 配置JWT 在settings.py文件中添加以下JWT的配置: python from datetime import timedelta SIMPLE_JWT = { 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60), 'REFRESH_TOKEN_LIFETIME': timedelta(days=1), 'ROTATE_REFRESH_TOKENS': True, 'BLACKLIST_AFTER_ROTATION': True, 'ALGORITHM': 'HS256', 'SIGNING_KEY': 'secret_key', 'VERIFYING_KEY': None, 'AUDIENCE': None, 'ISSUER': None, 'AUTH_HEADER_TYPES': ('Bearer',), 'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION', 'USER_ID_FIELD': 'id', 'USER_ID_CLAIM': 'user_id', 'JTI_CLAIM': 'jti', 'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp', 'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5), 'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1), } 7. 创建视图 在views.py文件中创建视图: python from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status from rest_framework.permissions import IsAuthenticated from rest_framework.decorators import api_view, permission_classes from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView from rest_framework_simplejwt.authentication import JWTAuthentication from rest_framework_simplejwt.exceptions import InvalidToken, TokenError from django.contrib.auth import authenticate from django.contrib.auth.models import update_last_login from .serializers import UserSerializer from .models import User class UserRegistrationView(APIView): def post(self, request): serializer = UserSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) class UserLoginView(TokenObtainPairView): def post(self, request, *args, **kwargs): try: email = request.data['email'] password = request.data['password'] user = authenticate(email=email, password=password) if user is None: return Response({'error': 'Invalid email or password'}, status=status.HTTP_400_BAD_REQUEST) refresh = self.get_token(user) update_last_login(None, user) return Response({ 'access': str(refresh.access_token), 'refresh': str(refresh), }) except KeyError: return Response({'error': 'Email and password are required'}, status=status.HTTP_400_BAD_REQUEST) class UserRefreshTokenView(TokenRefreshView): pass class UserDetailView(APIView): permission_classes = (IsAuthenticated,) authentication_classes = (JWTAuthentication,) def get(self, request): serializer = UserSerializer(request.user) return Response(serializer.data) 8. 创建序列化器 在serializers.py文件中创建用户序列化器: python from rest_framework import serializers from .models import User class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ('id', 'email', 'password') extra_kwargs = {'password': {'write_only': True}} def create(self, validated_data): user = User.objects.create_user( email=validated_data['email'], password=validated_data['password'], ) return user 9. 配置URL 在urls.py文件中配置URL: python from django.urls import path from .views import UserRegistrationView, UserLoginView, UserRefreshTokenView, UserDetailView urlpatterns = [ path('register/', UserRegistrationView.as_view(), name='register'), path('login/', UserLoginView.as_view(), name='login'), path('refresh_token/', UserRefreshTokenView.as_view(), name='refresh_token'), path('user_detail/', UserDetailView.as_view(), name='user_detail'), ] 10. 运行服务器 在命令行中输入以下命令来运行服务器: python manage.py runserver 现在,您可以使用Postman或其他HTTP客户端来测试API。在请求头中传递JWT令牌以验证用户身份。 希望这个简单的Django JWT用户管理系统可以帮助到您!
DRF(Django Rest Framework)是一个基于Django的强大而灵活的Web API框架。JWT(JSON Web Token)是一种用于身份验证和授权的开放标准。关于手写JWT,你可以按照以下步骤进行操作: 1. 首先,安装djangorestframework_simplejwt库,它提供了DRF的JWT认证支持。 2. 在Django的设置文件中配置JWT相关的参数,如密钥、过期时间等。 3. 创建一个自定义的Token生成函数或视图。你可以使用rest_framework_simplejwt.tokens.AccessToken类来生成JWT Token。在自定义的Token生成函数或视图中,你需要使用用户的身份信息(如用户名、ID等)来生成Token。 4. 在DRF的视图中使用JWT认证类,以确保只有带有有效Token的请求才能访问相关资源。你可以在视图类或全局设置中设置JWT认证类。 5. 在前端页面中,通过发送包含用户名和密码等凭据的请求来获取JWT Token。你可以使用JavaScript的fetch或jQuery的$.ajax方法发送POST请求,并将返回的Token保存在前端的本地存储或Cookie中。 6. 在后续的请求中,将JWT Token包含在请求的头部或参数中进行身份验证。你可以在请求头部中添加Authorization: Bearer <Token>,或在请求参数中添加?token=<Token>。 通过以上步骤,你就可以手写JWT认证功能并在DRF中使用了。记得在每个请求中进行Token的验证和刷新,并处理Token的过期和失效问题,以提高系统的安全性和用户体验。123 #### 引用[.reference_title] - *1* *2* *3* [【DjangoDRF+缓存+JWT+RabbitMQ 七万字总结】](https://blog.csdn.net/tc9527_/article/details/127235921)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

最新推荐

下载 拷贝.psd

下载 拷贝.psd

投资项目敏感性分析.xlsx

投资项目敏感性分析.xlsx

Scratch 敏捷游戏:弹跳球

角色数量:18,素材数量:181,积木数量:1622,音频数量:25 这个游戏是关于时间和色彩的协调。跟随节拍旋转你的三色三角形以匹配球的颜色,否则比赛就结束了。要控制三角形,请使用方向键或用手指左右滑动。球会在三角形上反弹,你必须匹配颜色才能保持它的反弹。不过要小心!颜色的变化不是随机的。它在两种颜色之间交替,所以要保持警惕。如果你不能匹配颜色,游戏就会结束。 此后仍有作品或有趣游戏、爆笑作品,请关注原作者,且点赞加收藏,记得推荐好友。下载即可游玩,快来下载吧!五星好评可以私信我,免费送资源!快来评论吧!

MATLAB遗传算法工具箱在函数优化中的应用.pptx

MATLAB遗传算法工具箱在函数优化中的应用.pptx

网格QCD优化和分布式内存的多主题表示

网格QCD优化和分布式内存的多主题表示引用此版本:迈克尔·克鲁斯。网格QCD优化和分布式内存的多主题表示。计算机与社会[cs.CY]南巴黎大学-巴黎第十一大学,2014年。英语。NNT:2014PA112198。电话:01078440HAL ID:电话:01078440https://hal.inria.fr/tel-01078440提交日期:2014年HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaireU大学巴黎-南部ECOLE DOCTORALE d'INFORMATIQUEDEPARIS- SUDINRIASAACALLE-DE-FRANCE/L ABORATOIrEDERECHERCH EEE NINFORMATIqueD.坐骨神经痛:我的格式是T是博士学位2014年9月26日由迈克尔·克鲁斯网格QCD优化和分布式内存的论文主任:克里斯汀·艾森贝斯研究主任(INRIA,LRI,巴黎第十一大学)评审团组成:报告员:M. 菲利普�

gru预测模型python

以下是一个使用GRU模型进行时间序列预测的Python代码示例: ```python import torch import torch.nn as nn import numpy as np import pandas as pd import matplotlib.pyplot as plt # 加载数据 data = pd.read_csv('data.csv', header=None) data = data.values.astype('float32') # 划分训练集和测试集 train_size = int(len(data) * 0.7) train_data = d

vmware12安装配置虚拟机

如何配置vmware12的“首选项”,"虚拟网络编辑器","端口映射”,"让虚拟机连接到外网”

松散事务级模型的并行标准兼容SystemC仿真

松散事务级模型的并行标准兼容SystemC仿真

AttributeError: 'MysqlUtil' object has no attribute 'db'

根据提供的引用内容,错误信息应该是'MysqlUtil'对象没有'db'属性,而不是'MysqlUtil'对象没有'connect'属性。这个错误信息通常是由于在代码中使用了'MysqlUtil'对象的'db'属性,但是该属性并不存在。可能的原因是'MysqlUtil'对象没有被正确地初始化或者没有正确地设置'db'属性。建议检查代码中是否正确地初始化了'MysqlUtil'对象,并且是否正确地设置了'db'属性。

数字化转型对企业业绩的影响研究以海尔智家为例.pptx

数字化转型对企业业绩的影响研究以海尔智家为例.pptx