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的Django框架测试驱动开发的教程
Apr 22 Python
Python 使用with上下文实现计时功能
Mar 09 Python
详解django中使用定时任务的方法
Sep 27 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
Apr 18 Python
python实现飞机大战游戏
Oct 26 Python
Django框架会话技术实例分析【Cookie与Session】
May 24 Python
numpy.linspace函数具体使用详解
May 27 Python
利用python在大量数据文件下删除某一行的例子
Aug 21 Python
Python高级特性 切片 迭代解析
Aug 23 Python
python实现连续变量最优分箱详解--CART算法
Nov 22 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
Apr 29 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 批量替换html标签的实例代码
2013/11/26 PHP
php+mysqli实现批量替换数据库表前缀的方法
2014/12/29 PHP
简单的php+mysql聊天室实现方法(附源码)
2016/01/05 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
javascript removeChild 使用注意事项
2009/04/11 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
JQuery实现倒计时按钮具体方法
2013/11/14 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
Javascript中字符串相关常用的使用方法总结
2017/03/13 Javascript
详解webpack打包vue时提取css
2017/05/26 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
AngularJS 应用模块化的使用
2018/04/04 Javascript
node上的redis调用优化示例详解
2018/10/30 Javascript
Vue3.x源码调试的实现方法
2019/10/13 Javascript
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python对字符串实现去重操作的方法示例
2017/08/11 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
python图像和办公文档处理总结
2019/05/28 Python
用vue.js组件模拟v-model指令实例方法
2019/07/05 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
python实现H2O中的随机森林算法介绍及其项目实战
2019/08/29 Python
python随机数分布random均匀分布实例
2019/11/27 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
2012/06/02 面试题
.net工程师笔试题
2012/06/09 面试题
医学专业职业生涯规划范文
2014/02/05 职场文书
对照四风自我剖析材料
2014/10/07 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
员工年终考核评语
2014/12/31 职场文书
军训结束新闻稿
2015/07/17 职场文书
创业计划书之服装
2019/10/07 职场文书
python中24小时制转换为12小时制的方法
2021/06/18 Python
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android