当前位置: 首页 > news >正文

drf 使用jwt

安装jwt

pip install pyJwt

添加登录url'

    path("jwt/login",views.JwtLoginView.as_view(),name='jwt-login'),path("jwt/order",views.JwtOrderView.as_view(),name='jwt-order'),

创建视图

from django.contrib.auth import authenticateimport jwt
from jwt import exceptions
import datetimeclass JwtLoginView(APIView):def post(self,request,*args,**kwargs):username = request.data.get("username")password = request.data.get("password")user_object = authenticate(username=username, password=password)if not user_object:return Response(data={"msg": "没有此用户信息"}, status=status.HTTP_404_NOT_FOUND)headers = {'typ':'jwt','alg':'HS256'}payload = {'user_id':user_object.id,'username':user_object.username,'exp':datetime.datetime.now()+datetime.timedelta(minutes=5)}token = jwt.encode(headers=headers,payload=payload,key=salt,algorithm="HS256").encode("utf-8")return Response(data=token, status=status.HTTP_200_OK)class JwtOrderView(APIView):def get(self, request, *args, **kwargs):token = request.data.get("token")print(token)payload = Nonemsg = Nonetry:payload = jwt.decode(token,salt,algorithms='HS256')except exceptions.ExpiredSignatureError:msg = 'token已失效'except exceptions.DecodeError:msg = 'token认证失败'except exceptions.InvalidTokenError:msg = '非法的token'if not  payload:return  Response({'code':1003,'error':msg})return Response("list")

抽取登录、验证操作

生成token #course/utils/jwt_auth.py


import jwt
import datetime
from django.conf import settingsdef create_token(payload, timeout=1):salt = settings.SECRET_KEYheaders = {'typ': 'jwt','alg': 'HS256'}payload['exp'] = datetime.datetime.now() + datetime.timedelta(minutes=timeout)token = jwt.encode(headers=headers, payload=payload, key=salt, algorithm="HS256").encode("utf-8")return token

登录验证 #course/extensions/auth.py


from rest_framework.authentication import BaseAuthentication
import jwt
from jwt import exceptions
import datetime
from rest_framework.exceptions import AuthenticationFailed
from django.conf import settingsclass JwtAuthentication(BaseAuthentication):def authenticate(self, request):token = request.data.get("token")salt = settings.SECRET_KEYpayload = Nonetry:payload = jwt.decode(token, salt, algorithms='HS256')except exceptions.ExpiredSignatureError:raise AuthenticationFailed({'code': 1003, 'errors': 'token已失效'})except exceptions.DecodeError:raise AuthenticationFailed({'code': 1003, 'errors': 'token认证失败'})except exceptions.InvalidTokenError:raise AuthenticationFailed({'code': 1003, 'errors': '非法的token'})return (payload, token)

调用


class ProLoginView(APIView):authentication_classes=[]def post(self,request,*args,**kwargs):username = request.data.get("username")password = request.data.get("password")user_object = authenticate(username=username, password=password)if not user_object:return Response(data={"msg": "没有此用户信息"}, status=status.HTTP_404_NOT_FOUND)token = create_token({'id':user_object.id,'name':user_object.username})return Response(data=token, status=status.HTTP_200_OK)class ProOrderView(APIView):authentication_classes(JwtAuthentication)def get(self, request, *args, **kwargs):print(request.user)return Response("list")

修改setting.py

 'DEFAULT_AUTHENTICATION_CLASSES':[# 'rest_framework.authentication.BasicAuthentication',#基本的用户名密码验证# 'rest_framework.authentication.SessionAuthentication',# 'rest_framework.authentication.TokenAuthentication','course.extensions.auth.JwtAuthentication'],

相关文章:

  • 智能库室联管联控系统|智能兵器室门禁管理系统
  • transformers基础组件之pipeline
  • navicat 如何导出数据库表 的这些信息 字段名 类型 描述
  • 《AI大模型应知应会100篇》第53篇:Hugging Face生态系统入门
  • 【动态导通电阻】软硬开关下GaN器件的动态RDSON
  • 使用FastAPI和React以及MongoDB构建全栈Web应用02 前言
  • 投影显示技术全解析:主流方案对比与雷克赛恩 CyberPro1 的核心优势
  • Jmeter中的BeanShell如何使用?
  • vscode_python远程调试_pathMappings配置说明
  • 美国、日本、印度、印度尼西亚\东帝汶、台湾电台电视地图数据
  • [学习]RTKLib详解:rtksvr.c与streamsvr.c
  • 光流 | 基于深度学习的光流估计算法汇总,原理,公式,流程图,代码
  • Android平台FFmpeg音视频开发深度指南
  • uniapp使用ui.request 请求流式输出
  • 【基于 LangChain 的异步天气查询3】OpenWeather实现实时天气查询
  • Java—— 集合 List
  • 真人配音与AI创作有声读物
  • D. Apple Tree Traversing 【Codeforces Round 1023 (Div. 2)】
  • LeetCode 热题 100 138. 随机链表的复制
  • 实验四:网络编程
  • 航行警告:渤海海峡黄海北部执行军事任务,禁止驶入
  • 巴西总统卢拉将访华
  • 匈牙利外长称匈方已驱逐两名乌克兰外交官
  • 康子兴评《文明的追求》|野人脚印:鲁滨逊的恐惧与文明焦虑
  • 马克思主义理论研究教学名师系列访谈|董雅华:让学生感知马克思主义理论存在于社会生活中
  • 习近平同俄罗斯总统普京会谈