当前位置: 首页 > 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'],

http://www.xdnf.cn/news/372223.html

相关文章:

  • cv_connection (像halcon一样对区域进行打散)
  • .Net Mqtt协议-MQTTNet(一)简介
  • 养生:为健康生活筑牢根基
  • 路由重发布
  • 软件测试——用例篇(3)
  • 嵌入式与物联网:C 语言在边缘计算时代的破局之道
  • OSPF不规则区域划分
  • Win10无法上网:Windows 无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目找不到域 TEST 的域控制器DNS 解析存在问题
  • 大节点是选择自建机房还是托管机房
  • 数据结构与算法分析实验12 实现二叉查找树
  • 深入理解 TCP:重传机制、滑动窗口、流量控制与拥塞控制
  • 考研408《计算机组成原理》复习笔记,第三章数值数据的表示和运算(定点数篇)
  • Ping 不通外网,Ping 得通主机问题解决小记
  • BUUCTF——Cookie is so stable
  • 《C++探幽:模板从初阶到进阶》
  • Docker Desktop安装在其他盘
  • [面试]SoC验证工程师面试常见问题(七)低速接口篇
  • rust-candle学习笔记13-实现多头注意力
  • Skyvern:用 AI+视觉驱动浏览器自动化
  • FreeTex v0.2.0:功能升级/支持Mac
  • Ubuntu 22.04(WSL2)使用 Docker 安装 Zipkin 和 Skywalking
  • 【含文档+PPT+源码】基于微信小程序的社区便民防诈宣传系统设计与实现
  • 基本句子结构
  • 前端取经路——现代API探索:沙僧的通灵法术
  • 每天五分钟机器学习:KTT条件
  • 在 Excel 中有效筛选重复元素
  • Stable Diffusion XL 文生图
  • 【金仓数据库征文】金融行业中的国产化数据库替代应用实践
  • C语言的中断 vs Java/Kotlin的异常:底层机制与高级抽象的对比
  • 365打卡第R8周: RNN实现阿尔茨海默病诊断