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的id()函数解密过程
Dec 25 Python
python学生管理系统开发
Jan 30 Python
pandas修改DataFrame列名的实现方法
Feb 22 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
Jul 31 Python
python中的global关键字的使用方法
Aug 20 Python
python 实现二维字典的键值合并等函数
Dec 06 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
Apr 01 Python
python如何从键盘获取输入实例
Jun 18 Python
Python计算矩阵的和积的实例详解
Sep 10 Python
Python进行特征提取的示例代码
Oct 15 Python
用python开发一款操作MySQL的小工具
May 12 Python
解析python中的jsonpath 提取器
Jan 18 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,不用COM,生成excel文件
2006/10/09 PHP
一个域名查询的程序
2006/10/09 PHP
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
PHP里的单例类写法实例
2015/06/25 PHP
PHP之正则表达式捕获组与非捕获组(详解)
2015/07/29 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
yii2实现分页,带搜索的分页功能示例
2017/01/07 PHP
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
利用浏览器全屏api实现js全屏
2014/01/16 Javascript
JS实现文件动态顺序载入的方法
2015/03/07 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
jQuery无刷新分页完整实例代码
2015/10/27 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
vue2笔记 — vue-router路由懒加载的实现
2017/03/03 Javascript
详解js几个绕不开的事件兼容写法
2017/08/30 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
node.js如何根据URL返回指定的图片详解
2020/10/21 Javascript
python的urllib模块显示下载进度示例
2014/01/17 Python
python3.7 sys模块的具体使用
2019/07/22 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
Django 解决阿里云部署同步数据库报错的问题
2020/05/14 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
CSS3教程(4):网页边框和网页文字阴影
2009/04/02 HTML / CSS
味多美官网:蛋糕订购,100%使用天然奶油
2017/11/10 全球购物
瑞典灯具和照明网上商店:Lamp24.se
2018/03/17 全球购物
员工薪酬福利制度
2014/01/17 职场文书
预备党员2014全国两会学习心得体会
2014/03/10 职场文书
团队精神口号
2014/06/06 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书
Nginx如何配置Http、Https、WS、WSS的方法步骤
2021/05/11 Servers
javascript函数式编程基础
2021/09/15 Javascript
JS封装cavans多种滤镜组件
2022/02/15 Javascript
React更新渲染原理深入分析
2022/12/24 Javascript