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中类型检查的详细介绍
Feb 13 Python
Python读取MRI并显示为灰度图像实例代码
Jan 03 Python
Python使用requests发送POST请求实例代码
Jan 25 Python
一看就懂得Python的math模块
Oct 21 Python
朴素贝叶斯Python实例及解析
Nov 19 Python
Python 利用切片从列表中取出一部分使用的方法
Feb 01 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
python不使用for计算两组、多个矩形两两间的iou方式
Jan 18 Python
python对Excel的读取的示例代码
Feb 14 Python
Python Request类源码实现方法及原理解析
Aug 17 Python
python制作抽奖程序代码详解
Jan 15 Python
用Python自动清理系统垃圾的实现
Jan 18 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 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
php通过COM类调用组件的实现代码
2012/01/11 PHP
PHP闭包(Closure)使用详解
2013/05/02 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
关于PHP语言构造器介绍
2013/07/08 PHP
PHP中使用TCPDF生成PDF文档实例
2014/07/01 PHP
PHP命令行脚本接收传入参数的三种方式
2014/08/20 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
jQuery之折叠面板的深入解析
2013/06/19 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
2015/05/12 Javascript
jquery图片滚动放大代码分享(1)
2015/08/25 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
2016/06/14 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
jquery uploadify如何取消已上传成功文件
2017/02/08 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
Python sys.argv用法实例
2015/05/28 Python
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
python实现简单的文字识别
2018/11/27 Python
Mac下Anaconda的安装和使用教程
2018/11/29 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
python图的深度优先和广度优先算法实例分析
2019/10/26 Python
jenkins配置python脚本定时任务过程图解
2019/10/29 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
土耳其国际性时尚购物网站:Modanisa
2018/01/19 全球购物
如何为DataGridView添加一个定制的Column Type
2014/01/21 面试题
学习经验演讲稿
2014/05/10 职场文书
工作失误检讨书(3篇)
2014/10/11 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
2014预防青少年违法犯罪工作总结
2014/12/10 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书