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认证类相关推荐

  1. java值的传递_Java 8可选–基于值的类使用指南

    java值的传递 In this article, we will go through the use of Java 8 Optional class and understand what a ...

  2. 5.1基于JWT的认证和授权「深入浅出ASP.NET Core系列」

    原文:5.1基于JWT的认证和授权「深入浅出ASP.NET Core系列」 希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢 ...

  3. 基于JWT的Token认证机制实现

    一.基于JWT的Token认证机制实现 1.什么是JWT JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. 2.JWT组成 ...

  4. js如何获取jwt信息_学习后端鉴权系列: 基于JWT的会话管理

    内容回顾 上一节讲了基于Cookie+Session的认证方案. Even:学习后端鉴权系列: 基于Cookie, Session认证​zhuanlan.zhihu.com 由于基于Session方案 ...

  5. Django基于JWT实现微信小程序的登录和鉴权

    什么是JWT? JWT,全称Json Web Token,用于作为JSON对象在各方之间安全地传输信息.该信息可以被验证和信任,因为它是数字签名的. 与Session的区别 一.Session是在服务 ...

  6. jwt重放攻击_【干货分享】基于JWT的Token认证机制及安全问题

    一步一步教你基于JWT的Token认证机制实现,以及如何防范XSS攻击.Replay攻击和中间人攻击. 文章目录 一.几种常用的认证机制 1.1 HTTP Basic Auth HTTP Basic ...

  7. ASP.NET WebApi 基于JWT实现Token签名认证

    一.前言 开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NET WebService服务中可以通过SoapHead验证机制 ...

  8. ABP从入门到精通(4):使用基于JWT标准的Token访问WebApi

    项目:asp.net zero 4.2.0 .net core(1.1) 版本 我们做项目的时候可能会遇到需要提供api给app调用,ABP动态生成的WebApi提供了方便的基于JWT标准的Token ...

  9. 第九节:JWT简介和以JS+WebApi为例基于JWT的安全校验

    一. 简介 1. 背景 传统的基于Session的校验存在诸多问题,比如:Session过期.服务器开销过大.不能分布式部署.不适合前后端分离的项目. 传统的基于Token的校验需要存储Key-Val ...

最新文章

  1. JdbcTemplate在Spring的ioc中使用
  2. 实验 3 检查点和参数化实验报告--软件功能测试与性能测试实验
  3. 用Elasticsearch代替数据库存储日志方式
  4. XHTML 语法规则及 HTML/XHTML 文档类型说明(XHTML 1.0/XHTML 1.1 和 HTML 4.01/HTML 5)
  5. 行为型设计模式(1)—— 责任链模式(Chain of Responsibility Pattern)
  6. 修改阿里云ECS服务器的系统时区
  7. 可视化操作和命令化操作
  8. ITIL 4 讲解:事件管理 (Incident Management)
  9. [4G+5G专题-145]: 一体化小基站- 5G小基站软件建议架构概述
  10. 【BP回归预测】基于matlab鲸鱼算法优化BP神经网络回归预测(多输入单输出)【含Matlab源码 1554期】
  11. 【20年9月】聊聊我的CISM备考过程,有经验有教训!
  12. win10定时开机(Win10定时开机关机)
  13. 域环境批量推送OUTLOOK签名
  14. 【数据结构与算法】删除线性表中的零元素
  15. 小米路由器微信连接到服务器,小米路由器怎么设置微信好友免密码直接链接上网?...
  16. STM32CubeMX学习(一) USB HID 双向通信
  17. 学习CSS3,使用双旋转实现福到了的迎春喜庆特效
  18. 久视伤血,久卧伤气,久坐伤肉,久立伤骨,久行伤筋
  19. 对于母版页的一些修改
  20. 关于个人数据泄露通知的示例 Published by EDPB

热门文章

  1. Scribefire发CSDN博客
  2. [新手学go]关于go语言中的变量重复声明
  3. .NET6之MiniAPI(十三):健康检查
  4. Cloudera将被私有化,Hadoop时代或将落幕
  5. WPF使用Animation仿WeChat(微信)播放语音消息
  6. .NetCore跨域
  7. Dapr微服务应用开发系列5:发布订阅构建块
  8. 【招聘(上海)】 坚果云 招聘Windows客户端(WPF方向)
  9. InfluxDB 2.0 之Flux语法篇
  10. ASP.NET Core on K8s学习之旅(14)Ingress灰度发布