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实现问号表达式(?)的方法
Nov 27 Python
Python中的lstrip()方法使用简介
May 19 Python
python实现将内容分行输出
Nov 05 Python
Python3使用requests包抓取并保存网页源码的方法
Mar 15 Python
Python中的__slots__示例详解
Jul 06 Python
Django基础知识与基本应用入门教程
Jul 20 Python
python使用numpy实现直方图反向投影示例
Jan 17 Python
Python collections.deque双边队列原理详解
Oct 05 Python
python利用 keyboard 库记录键盘事件
Oct 16 Python
彻底解决Python包下载慢问题
Nov 15 Python
Python 数据可视化之Bokeh详解
Nov 02 Python
python pygame 开发五子棋双人对弈
May 02 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
PHP获取文件夹内文件数的方法
2015/03/12 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
2016/06/19 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
2017/08/01 PHP
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
jQuery随机切换图片的小例子
2013/04/18 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
javascript中利用柯里化函数实现bind方法
2016/04/29 Javascript
详解vue 模拟后台数据(加载本地json文件)调试
2017/08/25 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
一个小时快速搭建微信小程序的方法步骤
2019/04/15 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
nodejs实现的http、https 请求封装操作示例
2020/02/06 NodeJs
[01:41]DOTA2 2015国际邀请赛中国区预选赛第三日战报
2015/05/28 DOTA
python3中str(字符串)的使用教程
2017/03/23 Python
Python多线程实现同步的四种方式
2017/05/02 Python
Python生成短uuid的方法实例详解
2018/05/29 Python
Python动态生成多维数组的方法示例
2018/08/09 Python
python全栈要学什么 python全栈学习路线
2019/06/28 Python
QML实现钟表效果
2020/06/02 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
英国女性时尚精品店:THE DRESSING ROOM
2018/05/23 全球购物
DBA的职责都有哪些
2012/05/16 面试题
高三自我鉴定范文
2013/10/19 职场文书
初一英语教学反思
2014/01/11 职场文书
班级德育工作实施方案
2014/02/21 职场文书
小学毕业典礼主持词
2014/03/27 职场文书
向国旗敬礼活动总结范文2014
2014/09/27 职场文书
2014年标准化工作总结
2014/12/17 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书
房屋维修申请报告
2015/05/18 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书
python数字图像处理:图像简单滤波
2022/06/28 Python