rest_framework11:jwt简单例子/自定制基于jwt认证类
jwt简单例子
一、登陆设置
1.不需要写login的视图类,使用jwt内置的。
2.需要前置条件,已有继承AbstractUser models,并且有数据,用于校验,返回token。
urls.py
from rest_framework_jwt.views import obtain_jwt_tokenurlpatterns = [path('login/', obtain_jwt_token),...
]
二、访问视图类设置
需要两者搭配,才能校验
authentication_classes = [JSONWebTokenAuthentication,]# 权限控制permission_classes = [IsAuthenticated,]
urls.py
urlpatterns = [path('login/', obtain_jwt_token),path('orderview/', views.OrderAPIView.as_view()),path('userinfo/', views.UserInfoAPIView.as_view()),]
views.py
from rest_framework.views import APIView
from rest_framework.response import Response# 使用jwt 提供的认证类,局部使用
from rest_framework_jwt.authentication import JSONWebTokenAuthentication# 内置权限类
from rest_framework.permissions import IsAuthenticated# 但设定权限,登陆才能访问。
class OrderAPIView(APIView):authentication_classes = [JSONWebTokenAuthentication,]# 权限控制permission_classes = [IsAuthenticated,]def get(self,request):return Response('这是订单信息')class UserInfoAPIView(APIView):authentication_classes = [JSONWebTokenAuthentication,] # 可以理解成,全局设定了,游客可以访问。def get(self,request):return Response('这是UserInfoAPIView')
自定制基于jwt认证类
一、控制接口返回的数据格式
utils.py
def My_jwt_response_payload_handler(token, user=None, request=None):return {'token': token,'msg':'登录成功','status':100,'username':user.username}
settings.py
JWT_AUTH={'JWT_RESPONSE_PAYLOAD_HANDLER':'app02.utils.My_jwt_response_payload_handler'
}
二、自定义基于jwt的权限类
因为是自己定制的,所以可以返回错误信息,当没有携带token字段。这是与上面“jwt简单例子”的区别。
1.自定义验证。
utils.py
from rest_framework_jwt.authentication import BaseAuthentication
from rest_framework_jwt.authentication import BaseJSONWebTokenAuthentication
from rest_framework.exceptions import AuthenticationFailed
# from rest_framework_jwt.authentication import jwt_decode_handler
from rest_framework_jwt.utils import jwt_decode_handler # 与上面是一个
import jwt
from api import models# class MyJwtAuthentication(BaseAuthentication):
# def authenticate(self, request):
# jwt_value = request.META.get('HTTP_AUTHORIZATION')
# if jwt_value:
# try:
# # jwt 提供了通过三段token,取出payload的方法,并且有校验功能
# payload = jwt_decode_handler(jwt_value)
#
# except jwt.ExpiredSignature:
# raise AuthenticationFailed('签名过期')
# except jwt.InvalidTokenError:
# raise AuthenticationFailed('用户非法')
# except Exception as e:
# raise AuthenticationFailed(str(e))
#
# # 因为payload 就是用户信息字典
# print(payload)
# # 第一种,去数据库查
# # user=models.User.objects.get(pk=payload.get('user_id'))
# # 第二种,不查数据库
# user=models.User(id=payload.get('user_id'),username=payload.get('username'))
# return user,jwt_value
# # 没有值,直接抛异常
# raise AuthenticationFailed('没有携带认证信息')# 基于BaseJSONWebTokenAuthentication
# 可以使用内置方法获取user
class MyJwtAuthentication(BaseJSONWebTokenAuthentication):def authenticate(self, request):jwt_value = request.META.get('HTTP_AUTHORIZATION')if jwt_value:try:# jwt 提供了通过三段token,取出payload的方法,并且有校验功能payload = jwt_decode_handler(jwt_value)except jwt.ExpiredSignature:raise AuthenticationFailed('签名过期')except jwt.InvalidTokenError:raise AuthenticationFailed('用户非法')except Exception as e:raise AuthenticationFailed(str(e))# 因为payload 就是用户信息字典user=self.authenticate_credentials(payload)return user,jwt_value# 没有值,直接抛异常raise AuthenticationFailed('没有携带认证信息')
2.视图类
#
from app02.utils import MyJwtAuthentication
class GoodsInfoAPIView(APIView):authentication_classes = [MyJwtAuthentication,]def get(self,request,*args,**kwargs):print(request.user)return Response('商品信息')
3.urls.py
path('goods/', views.GoodsInfoAPIView.as_view()),
rest_framework11:jwt简单例子/自定制基于jwt认证类相关推荐
- java值的传递_Java 8可选–基于值的类使用指南
java值的传递 In this article, we will go through the use of Java 8 Optional class and understand what a ...
- 5.1基于JWT的认证和授权「深入浅出ASP.NET Core系列」
原文:5.1基于JWT的认证和授权「深入浅出ASP.NET Core系列」 希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢 ...
- 基于JWT的Token认证机制实现
一.基于JWT的Token认证机制实现 1.什么是JWT JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. 2.JWT组成 ...
- js如何获取jwt信息_学习后端鉴权系列: 基于JWT的会话管理
内容回顾 上一节讲了基于Cookie+Session的认证方案. Even:学习后端鉴权系列: 基于Cookie, Session认证zhuanlan.zhihu.com 由于基于Session方案 ...
- Django基于JWT实现微信小程序的登录和鉴权
什么是JWT? JWT,全称Json Web Token,用于作为JSON对象在各方之间安全地传输信息.该信息可以被验证和信任,因为它是数字签名的. 与Session的区别 一.Session是在服务 ...
- jwt重放攻击_【干货分享】基于JWT的Token认证机制及安全问题
一步一步教你基于JWT的Token认证机制实现,以及如何防范XSS攻击.Replay攻击和中间人攻击. 文章目录 一.几种常用的认证机制 1.1 HTTP Basic Auth HTTP Basic ...
- ASP.NET WebApi 基于JWT实现Token签名认证
一.前言 开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NET WebService服务中可以通过SoapHead验证机制 ...
- ABP从入门到精通(4):使用基于JWT标准的Token访问WebApi
项目:asp.net zero 4.2.0 .net core(1.1) 版本 我们做项目的时候可能会遇到需要提供api给app调用,ABP动态生成的WebApi提供了方便的基于JWT标准的Token ...
- 第九节:JWT简介和以JS+WebApi为例基于JWT的安全校验
一. 简介 1. 背景 传统的基于Session的校验存在诸多问题,比如:Session过期.服务器开销过大.不能分布式部署.不适合前后端分离的项目. 传统的基于Token的校验需要存储Key-Val ...
最新文章
- JdbcTemplate在Spring的ioc中使用
- 实验 3 检查点和参数化实验报告--软件功能测试与性能测试实验
- 用Elasticsearch代替数据库存储日志方式
- XHTML 语法规则及 HTML/XHTML 文档类型说明(XHTML 1.0/XHTML 1.1 和 HTML 4.01/HTML 5)
- 行为型设计模式(1)—— 责任链模式(Chain of Responsibility Pattern)
- 修改阿里云ECS服务器的系统时区
- 可视化操作和命令化操作
- ITIL 4 讲解:事件管理 (Incident Management)
- [4G+5G专题-145]: 一体化小基站- 5G小基站软件建议架构概述
- 【BP回归预测】基于matlab鲸鱼算法优化BP神经网络回归预测(多输入单输出)【含Matlab源码 1554期】
- 【20年9月】聊聊我的CISM备考过程,有经验有教训!
- win10定时开机(Win10定时开机关机)
- 域环境批量推送OUTLOOK签名
- 【数据结构与算法】删除线性表中的零元素
- 小米路由器微信连接到服务器,小米路由器怎么设置微信好友免密码直接链接上网?...
- STM32CubeMX学习(一) USB HID 双向通信
- 学习CSS3,使用双旋转实现福到了的迎春喜庆特效
- 久视伤血,久卧伤气,久坐伤肉,久立伤骨,久行伤筋
- 对于母版页的一些修改
- 关于个人数据泄露通知的示例 Published by EDPB
热门文章
- Scribefire发CSDN博客
- [新手学go]关于go语言中的变量重复声明
- .NET6之MiniAPI(十三):健康检查
- Cloudera将被私有化,Hadoop时代或将落幕
- WPF使用Animation仿WeChat(微信)播放语音消息
- .NetCore跨域
- Dapr微服务应用开发系列5:发布订阅构建块
- 【招聘(上海)】 坚果云 招聘Windows客户端(WPF方向)
- InfluxDB 2.0 之Flux语法篇
- ASP.NET Core on K8s学习之旅(14)Ingress灰度发布