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正则用法的简单实例
Jun 21 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
python 实现矩阵上下/左右翻转,转置的示例
Jan 23 Python
Django网络框架之创建虚拟开发环境操作示例
Jun 06 Python
pyqt5 从本地选择图片 并显示在label上的实例
Jun 13 Python
pytorch对梯度进行可视化进行梯度检查教程
Feb 04 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
Mar 09 Python
Python实现加密接口测试方法步骤详解
Jun 05 Python
对Keras中predict()方法和predict_classes()方法的区别说明
Jun 09 Python
Keras中的两种模型:Sequential和Model用法
Jun 27 Python
详解python算法常用技巧与内置库
Oct 17 Python
python爬虫使用scrapy注意事项
Nov 23 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中3种方法统计字符串中每种字符的个数并排序
2012/08/27 PHP
基于empty函数的判断详解
2013/06/17 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
PHP中的多种加密技术及代码示例解析
2016/10/20 PHP
php实现微信分享朋友链接功能
2019/02/18 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
datePicker——日期选择控件(with jquery)
2007/02/20 Javascript
JavaScript中函数声明优先于变量声明的实例分析
2012/03/01 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
2014/03/17 Javascript
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
jquery移动节点实例
2015/01/14 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
手机端转换rem适应
2017/04/01 Javascript
node.js支持多用户web终端实现及安全方案
2017/11/29 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
八种Vue组件间通讯方式合集(推荐)
2020/08/18 Javascript
python中私有函数调用方法解密
2016/04/29 Python
windows下Python实现将pdf文件转化为png格式图片的方法
2017/07/21 Python
Django开发中的日志输出的方法
2018/07/02 Python
django利用request id便于定位及给日志加上request_id
2018/08/26 Python
Python实现的拉格朗日插值法示例
2019/01/08 Python
使用Python在Windows下获取USB PID&VID的方法
2019/07/02 Python
基于Python实现剪切板实时监控方法解析
2019/09/11 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
司机职责范本
2014/03/08 职场文书
调查研究项目计划书
2014/04/29 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
读《解忧杂货店》有感:请相信一切都是最好的安排
2019/11/07 职场文书
python绘制箱型图
2021/04/27 Python
PostgreSQL13基于流复制搭建后备服务器的方法
2022/01/18 PostgreSQL
JavaScript ES6的函数拓展
2022/01/18 Javascript
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers