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 ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
Jun 10 Python
Python使用Scrapy爬取妹子图
May 28 Python
Python实现在线音乐播放器
Mar 03 Python
浅谈pytorch和Numpy的区别以及相互转换方法
Jul 26 Python
详解Python:面向对象编程
Apr 10 Python
详解python中的hashlib模块的使用
Apr 22 Python
Django框架登录加上验证码校验实现验证功能示例
May 23 Python
python3 selenium自动化 frame表单嵌套的切换方法
Aug 23 Python
如何基于python实现归一化处理
Jan 20 Python
解决django 向mysql中写入中文字符出错的问题
May 18 Python
python反爬虫方法的优缺点分析
Nov 25 Python
python 利用jieba.analyse进行 关键词提取
Dec 17 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
phpfans留言版用到的数据操作类和分页类
2007/01/04 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
2020/05/29 PHP
IE浏览器打印的页眉页脚设置解决方法
2009/12/08 Javascript
离开页面时检测表单元素是否被修改,提示保存的js代码
2010/08/25 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
json的使用小结
2016/06/08 Javascript
AngularJS使用ng-repeat指令实现下拉框
2016/08/23 Javascript
Vue.js自定义指令的用法与实例解析
2017/01/18 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
微信小程序 蓝牙的实现实例代码
2017/06/27 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
vue实现PC端录音功能的实例代码
2019/06/05 Javascript
利用JS代码自动删除稿件的普通弹幕功能
2019/09/20 Javascript
使用axios请求时,发送formData请求的示例
2019/10/29 Javascript
js判断密码强度的方法
2020/03/18 Javascript
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
2018/12/06 Python
python通过txt文件批量安装依赖包的实现步骤
2019/08/13 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
python实现统计代码行数的小工具
2019/09/19 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
python orm 框架中sqlalchemy用法实例详解
2020/02/02 Python
pytorch实现MNIST手写体识别
2020/02/14 Python
基于python实现查询ip地址来源
2020/06/02 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
材料成型专业个人求职信范文
2013/09/25 职场文书
电气自动化自荐信
2013/10/10 职场文书
药物学专业学生的自我评价
2013/10/27 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
个人催款函范文
2015/06/24 职场文书
Python可视化神器pyecharts绘制水球图
2022/07/07 Python