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调用机器喇叭发出蜂鸣声(Beep)的方法
Mar 23 Python
Python函数的周期性执行实现方法
Aug 13 Python
Python for循环生成列表的实例
Jun 15 Python
python机器学习之KNN分类算法
Aug 29 Python
Python骚操作之动态定义函数
Mar 26 Python
零基础使用Python读写处理Excel表格的方法
May 02 Python
python设置环境变量的作用和实例
Jul 09 Python
python+opencv像素的加减和加权操作的实现
Jul 14 Python
jupyter notebook读取/导出文件/图片实例
Apr 16 Python
python实现一次性封装多条sql语句(begin end)
Jun 06 Python
opencv 图像腐蚀和图像膨胀的实现
Jul 07 Python
Python操作dict时避免出现KeyError的几种解决方法
Sep 20 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中图片等比缩放的实例
2013/03/24 PHP
一个不易被发现的PHP后门代码解析
2014/07/05 PHP
php制作文本式留言板
2015/03/18 PHP
yii框架数据库关联查询操作示例
2019/10/14 PHP
JavaScript XML实现两级级联下拉列表
2008/11/10 Javascript
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
seajs1.3.0源码解析之module依赖有序加载
2012/11/07 Javascript
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
javascript中style.left和offsetLeft的用法说明
2014/03/07 Javascript
js获得网页背景色和字体色的方法
2014/03/21 Javascript
PHP抓取HTTPS内容和错误处理的方法
2016/09/30 Javascript
jQuery如何跳转到另一个网页 就这么简单
2016/12/28 Javascript
无限循环轮播图之运动框架(原生JS实现)
2017/10/01 Javascript
jQuery实现简单的回到顶部totop功能示例
2017/10/16 jQuery
element-ui 限制日期选择的方法(datepicker)
2018/05/16 Javascript
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
JS判断用户用的哪个浏览器实例详解
2018/10/09 Javascript
jquery ui 实现 tab标签功能示例【测试可用】
2019/07/25 jQuery
浅析vue中的nextTick
2020/12/28 Vue.js
[02:57]DOTA2亚洲邀请赛小组赛第四日 赛事回顾
2015/02/02 DOTA
如何使用python爬取csdn博客访问量
2016/02/14 Python
Sanic框架配置操作分析
2018/07/17 Python
基于python历史天气采集的分析
2019/02/14 Python
pyqt5利用pyqtDesigner实现登录界面
2019/03/28 Python
Python异常处理例题整理
2019/07/07 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
2020/03/19 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
AmazeUI的JS表单验证框架实战示例分享
2020/08/21 HTML / CSS
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
标记环介质访问控制协议
2016/03/27 面试题
写自荐信三大法宝
2014/01/24 职场文书
城建学院毕业生自荐信
2014/01/31 职场文书
《鞋匠的儿子》教学反思
2014/03/02 职场文书
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书