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实现简单的相似图片搜索的教程
Apr 23 Python
python实现linux下使用xcopy的方法
Jun 28 Python
python通过加号运算符操作列表的方法
Jul 28 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
Oct 14 Python
详解python使用turtle库来画一朵花
Mar 21 Python
pandas DataFrame行或列的删除方法的实现示例
Aug 02 Python
Pytoch之torchvision.transforms图像变换实例
Dec 30 Python
python实现同一局域网下传输图片
Mar 20 Python
Python实现计算图像RGB均值方式
Jun 04 Python
Python 日期与时间转换的方法
Aug 01 Python
Django-celery-beat动态添加周期性任务实现过程解析
Nov 26 Python
python邮件中附加文字、html、图片、附件实现方法
Jan 04 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短域名转换为实际域名函数
2011/01/17 PHP
php实例化一个类的具体方法
2019/09/19 PHP
如何将网页表格内容导入excel
2014/02/18 Javascript
使用js操作css实现js改变背景图片示例
2014/03/10 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
2014/10/17 Javascript
javascript浏览器窗口之间传递数据的方法
2015/01/20 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
JQuery 获取Dom元素的实例讲解
2017/07/08 jQuery
JS实现的RC4加密算法示例
2018/08/16 Javascript
JS实现的input选择图片本地预览功能示例
2018/08/29 Javascript
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
2020/05/08 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
Python基于select实现的socket服务器
2016/04/13 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
Python基于requests实现模拟上传文件
2020/04/21 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
Python实现自动装机功能案例分析
2020/10/22 Python
举例讲解Python装饰器
2020/12/24 Python
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
模具设计与制造专业推荐信
2014/02/16 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
2015年学生会部门工作总结
2015/04/21 职场文书
幼儿园语言教学反思
2016/02/23 职场文书
python 实现定时任务的四种方式
2021/04/01 Python