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 相关文章推荐
go和python调用其它程序并得到程序输出
Feb 10 Python
python使用sorted函数对列表进行排序的方法
Apr 04 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
May 04 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
Feb 19 Python
Python实现文件复制删除
Apr 19 Python
python实现八大排序算法(2)
Sep 14 Python
使用Pyinstaller的最新踩坑实战记录
Nov 08 Python
python3.x实现发送邮件功能
May 22 Python
python selenium 获取标签的属性值、内容、状态方法
Jun 22 Python
python游戏开发的五个案例分享
Mar 09 Python
Django如何使用redis作为缓存
May 21 Python
pytorch 带batch的tensor类型图像显示操作
May 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
php之XML转数组函数的详解
2013/06/07 PHP
PHP获取当前url的具体方法全面解析
2013/11/26 PHP
PHP中实现生成静态文件的方法缓解服务器压力
2014/01/07 PHP
php实现微信发红包
2015/12/05 PHP
YII Framework框架教程之日志用法详解
2016/03/14 PHP
php+html5+ajax实现上传图片的方法
2016/05/14 PHP
用javascript实现画板的代码
2007/09/05 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
2016/11/03 Javascript
使用AngularJS2中的指令实现按钮的切换效果
2017/03/27 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
2017/07/11 Javascript
基于ES6 Array.of的用法(实例讲解)
2017/09/05 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
vue实现防抖的实例代码
2021/01/11 Vue.js
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
Python中处理时间的几种方法小结
2015/04/09 Python
Python中set与frozenset方法和区别详解
2016/05/23 Python
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
Python贪吃蛇游戏编写代码
2020/10/26 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
windows下python和pip安装教程
2018/05/25 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
国际化的太阳镜及太阳镜配件零售商:Sunglass Hut
2016/07/26 全球购物
梵蒂冈和罗马卡:Omnia Card Pass
2018/02/10 全球购物
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
通信工程专业个人找工作求职信范文
2013/09/21 职场文书
开服装店计划书
2014/08/15 职场文书
科学育儿宣传标语
2014/10/08 职场文书
Python机器学习之底层实现KNN
2021/06/20 Python
Java常用工具类汇总 附示例代码
2021/06/26 Java/Android
Python学习之包与模块详解
2022/03/19 Python
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电
Go中使用gjson来操作JSON数据的实现
2022/08/14 Golang