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实现rsa算法代码
Feb 17 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
Jun 03 Python
python表格存取的方法
Mar 07 Python
python中subprocess批量执行linux命令
Apr 27 Python
对pandas中两种数据类型Series和DataFrame的区别详解
Nov 12 Python
Python 利用pydub库操作音频文件的方法
Jan 09 Python
Python+OpenCV图片局部区域像素值处理详解
Jan 23 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
Jul 09 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
Aug 24 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
Jun 23 Python
Python代码需要缩进吗
Jul 01 Python
如何快速一次性卸载所有python包(第三方库)呢
Oct 20 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
Zend Framework中的简单工厂模式 图文
2012/07/10 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
JavaScript 序列化对象实现代码
2009/12/18 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
javascript删除数组重复元素的方法汇总
2015/06/24 Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
2016/07/09 Javascript
EasyUI为Numberbox添加blur事件的方法
2017/03/05 Javascript
JS简单封装的图片无缝滚动效果示例【测试可用】
2017/03/22 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
详解关于html,css,js三者的加载顺序问题
2019/04/10 Javascript
Vue关于组件化开发知识点详解
2020/05/13 Javascript
vue 扩展现有组件的操作
2020/08/14 Javascript
[01:20]辉夜杯背景故事宣传片《辉夜传说》
2015/12/25 DOTA
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
Python使用正则表达式实现文本替换的方法
2017/04/18 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
python绘制多个子图的实例
2019/07/07 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
Python完全识别验证码自动登录实例详解
2019/11/24 Python
Python函数的定义方式与函数参数问题实例分析
2019/12/26 Python
PyTorch中的Variable变量详解
2020/01/07 Python
Python 处理日期时间的Arrow库使用
2020/08/18 Python
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
利用CSS3的3D效果制作正方体
2020/03/10 HTML / CSS
美国玩具公司:U.S.Toy
2018/05/19 全球购物
俄罗斯童装网上商店:BebaKids
2020/06/06 全球购物
函授毕业生的自我鉴定
2013/11/26 职场文书
大学生个人求职口试自我评价
2014/02/16 职场文书
2014年后勤工作总结
2014/11/18 职场文书
2015暑假打工实践报告
2015/07/13 职场文书
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python