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三级菜单的实例
Sep 13 Python
Python实现的摇骰子猜大小功能小游戏示例
Dec 18 Python
Python 字符串转换为整形和浮点类型的方法
Jul 17 Python
使用python telnetlib批量备份交换机配置的方法
Jul 25 Python
OpenCV+face++实现实时人脸识别解锁功能
Aug 28 Python
Python pickle模块实现对象序列化
Nov 22 Python
python保存log日志,实现用log日志画图
Dec 24 Python
浅谈Python访问MySQL的正确姿势
Jan 07 Python
Python实现自动访问网页的例子
Feb 21 Python
浅谈Python 参数与变量
Jun 20 Python
python修改微信和支付宝步数的示例代码
Oct 12 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
Oct 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
无限级别菜单的实现
2006/10/09 PHP
PHP个人网站架设连环讲(三)
2006/10/09 PHP
黑夜路人出的几道php笔试题
2009/08/04 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
2012/12/29 PHP
javascript 获取url参数和script标签中获取url参数函数代码
2010/01/22 Javascript
URL地址中的#符号使用说明
2011/02/12 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
微信小程序使用checkbox显示多项选择框功能【附源码下载】
2017/12/11 Javascript
微信小程序 如何引入外部字体库iconfont的图标
2018/01/31 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
Node+OCR实现图像文字识别功能
2018/11/26 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
2019/06/12 Javascript
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
python教程之用py2exe将PY文件转成EXE文件
2014/06/12 Python
python中的五种异常处理机制介绍
2014/09/02 Python
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
Python中函数参数匹配模型详解
2019/06/09 Python
python序列化与数据持久化实例详解
2019/12/20 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
运动会入场词200字
2014/02/15 职场文书
年度考核自我鉴定
2014/03/19 职场文书
另类冲刺标语
2014/06/24 职场文书
万能检讨书2000字
2014/10/17 职场文书
感谢信
2019/04/11 职场文书
创业计划书之面包店
2019/09/17 职场文书
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL