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的线程来解决生产者消费问题的示例
Apr 02 Python
python中的代码编码格式转换问题
Jun 10 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
Dec 27 Python
Python中取整的几种方法小结
Jan 06 Python
python通过elixir包操作mysql数据库实例代码
Jan 31 Python
Python3.遍历某文件夹提取特定文件名的实例
Apr 26 Python
Pycharm更换python解释器的方法
Oct 29 Python
详解python的四种内置数据结构
Mar 19 Python
Django实现发送邮件功能
Jul 18 Python
python通过SSH登陆linux并操作的实现
Oct 10 Python
Python实现自动整理文件的脚本
Dec 17 Python
Python可视化学习之matplotlib内置单颜色
Feb 24 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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
使用php+xslt在windows平台上
2006/10/09 PHP
PHP中的日期处理方法集锦
2007/01/02 PHP
ajax实现无刷新分页(php)
2010/07/18 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
2016/03/06 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
用简洁的jQuery方法toggleClass实现隔行换色
2014/10/22 Javascript
js正则表达式中exec用法实例
2015/07/23 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
2015/11/29 Javascript
Javascript的表单与验证-非空验证
2016/03/18 Javascript
Vue.js系列之vue-router(上)(3)
2017/01/03 Javascript
在 Angular 中实现搜索关键字高亮示例
2017/03/21 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
详解Vue源码学习之双向绑定
2019/04/10 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
微信小程序网络请求实现过程解析
2019/11/06 Javascript
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
Flask SQLAlchemy一对一,一对多的使用方法实践
2013/02/10 Python
python paramiko利用sftp上传目录到远程的实例
2019/01/03 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
为什么是 Python -m
2020/06/19 Python
Python3使用 GitLab API 进行批量合并分支
2020/10/15 Python
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
植村秀加拿大官网:Shu Uemura加拿大
2019/09/03 全球购物
中文师范生自荐信
2014/01/30 职场文书
成人继续教育实施方案
2014/03/01 职场文书
红色旅游心得体会
2014/09/03 职场文书
辞职信如何写
2015/02/27 职场文书
毕业生个人自荐书
2015/03/05 职场文书
25张裸眼3D图片,带你重温童年的记忆,感受3D的魅力
2022/02/06 杂记
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫