Python 基于jwt实现认证机制流程解析


Posted in Python onJune 22, 2020

1.jwt的优缺点

jwt的优点:

1. 实现分布式的单点登陆非常方便

2. 数据实际保存在客户端,所以我们可以分担数据库或服务器的存储压力

jwt的缺点:

1. 数据保存在了客户端,我们服务端只认jwt,不识别客户端。
2. jwt可以设置过期时间,但是因为数据保存在了客户端,所以对于过期时间不好调整。

2.安装jwt

pip install djangorestframework-jwt -i https://pypi.douban.com/simple

3.在settings.dev中

REST_FRAMEWORK = {
  'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    'rest_framework.authentication.SessionAuthentication',
    'rest_framework.authentication.BasicAuthentication',
  ),
}
import datetime
JWT_AUTH = {
  'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1), ##设置token的有效值
}

4.手动生成jwt

from rest_framework_jwt.settings import api_settings
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER

payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)

5.后端实现登陆认证接口(在子应用路由urls.py中)

from rest_framework_jwt.views import obtain_jwt_token
urlpatterns = [
  path(r'login/', obtain_jwt_token),   ##提供接口
]

6.自定义返回数据,(user.utils.jwt_response_payload_handler路径下)

def jwt_response_payload_handler(token, user=None, request=None):
  """
  自定义jwt认证成功返回数据
  """
  return {
    'token': token,
    'id': user.id,
    'username': user.username
  }#这个是自定义jwt认证成功返回数据,一般会放在子应用下utils文件中,然后在settings中配置,将路径告诉django

7.修改settings.dev配置文件

# JWT
JWT_AUTH = {
  'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
  'JWT_RESPONSE_PAYLOAD_HANDLER': 'user.utils.jwt_response_payload_handler',
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现将html表格转换成CSV文件的方法
Jun 28 Python
利用numpy+matplotlib绘图的基本操作教程
May 03 Python
Python学习思维导图(必看篇)
Jun 26 Python
Python实战小程序利用matplotlib模块画图代码分享
Dec 09 Python
Python简单生成随机数的方法示例
Mar 31 Python
Python读取excel指定列生成指定sql脚本的方法
Nov 28 Python
python感知机实现代码
Jan 18 Python
python实现AES加密与解密
Mar 28 Python
python实现信号时域统计特征提取代码
Feb 26 Python
python3利用Axes3D库画3D模型图
Mar 25 Python
python爬虫--selenium模块
Mar 31 Python
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
Apr 12 Python
python中format函数如何使用
Jun 22 #Python
Tensorflow与Keras自适应使用显存方式
Jun 22 #Python
python数据类型强制转换实例详解
Jun 22 #Python
keras 指定程序在某块卡上训练实例
Jun 22 #Python
python Socket网络编程实现C/S模式和P2P
Jun 22 #Python
Python手动或自动协程操作方法解析
Jun 22 #Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 #Python
You might like
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
判断浏览器的javascript版本的代码
2010/09/03 Javascript
jQuery实现鼠标经过图片预览大图效果
2014/04/10 Javascript
js函数调用的方式
2014/05/06 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
javascript常见数字进制转换实例分析
2016/04/21 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
javascript显示系统当前时间代码
2016/12/29 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
Three.js实现3D机房效果
2018/12/30 Javascript
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
JS实现图片懒加载(lazyload)过程详解
2020/04/02 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
Python 中的with关键字使用详解
2016/09/11 Python
Python 爬虫模拟登陆知乎
2016/09/23 Python
详解django的serializer序列化model几种方法
2018/10/16 Python
Django urls.py重构及参数传递详解
2019/07/23 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
浅谈CSS3中display属性的Flex布局的方法
2017/08/14 HTML / CSS
日本著名的服饰鞋帽综合类购物网站:MAGASEEK
2019/01/09 全球购物
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
关于Assembly命名空间的三个面试题
2015/07/23 面试题
施工班组长岗位职责
2014/01/05 职场文书
先进个人事迹材料
2014/01/25 职场文书
市场安全管理制度
2014/01/26 职场文书
超市国庆节促销方案
2014/02/20 职场文书
房产委托公证书样本
2014/04/04 职场文书
Python内置数据结构列表与元组示例详解
2021/08/04 Python