django使用JWT保存用户登录信息


Posted in Python onApril 22, 2020

在使用前必须弄明白JWT的相关知识,可以看我的另一篇博文:https://3water.com/article/166843.htm

什么是JWT?

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

JWT最普遍的一个作用就是用来保存用户的登录信息。

JWT的流程

django使用JWT保存用户登录信息

1.签发JWT

在用户正确输入账号密码成功登录后,服务端就会签发JWT。

django使用第三方库djangorestframework-jwt生成JWT,所以先安装第三方包。

pip install djangorestframework-jwt

然后需要在django的配置上增加:

REST_FRAMEWORK = {
 'DEFAULT_AUTHENTICATION_CLASSES': (
  'rest_framework_jwt.authentication.JSONWebTokenAuthentication', # jwt认证
  'rest_framework.authentication.SessionAuthentication',    # 管理后台使用
  'rest_framework.authentication.BasicAuthentication',
 ),
 ...
}

JWT_AUTH = { # 导包: import datetime
 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1), # jwt有效时间
}

然后就可以签发JWT了。

from rest_framework_jwt.settings import api_settings

jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER # 生payload部分的方法
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER # 生成jwt的方法

# {'exp': xxx, 'email': '', 'user_id': 1, 'username': 'admin'}
# user:登录的用户对象
payload = jwt_payload_handler(user) # 生成payload, 得到字典
token = jwt_encode_handler(payload) # 生成jwt字符串

生成之后,通过JSON字符串的方式返回给前端。

2.前端保存JWT

前端有两种方式储存数据,分别是localStorage 和 sessionStorage。

HTML5提供了两种在客户端存储数据的新方法:
- localStorage - 永久数据存储; 不同页面数据共享
- sessionStorage - 临时存储,关闭页面或浏览器后会被清除; (读取sessionStorage的数据时,仅当前页面(窗口)有效,但是JWT toekn会保存直到浏览器关闭)

sessionStorage.key = val // 保存数据
sessionStorage.key // 读取数据
sessionStorage.clear() // 清除所有sessionStorage保存的数据
sessionStorage.removeItem('key');

localStorage.key = val // 保存数据
localStorage.key // 读取数据
localStorage.clear() // 清除所有localStorage保存的数据
localStorage.removeItem('key');

3.前端发送JWT

前端会通过请求头把JWT带上,传给服务端。

var config = {
 headers: { // 请求头
  'Authorization': 'JWT ' + this.token # JWT后面有一个空格!
 },
}; 
axios.get('http://api.meiduo.site:8000/test/', config)
 .then(response => {})
 .catch(error => {});

4.校验JWT

在前端有JWT后,再次登录服务端,服务端就会对这串JWT进行校验,如果有修改就不会通过,如果过期了也不会通过。

到此这篇关于django使用JWT保存用户登录信息的文章就介绍到这了,更多相关django 保存用户登录信息内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python 命令行非阻塞输入的小例子
Sep 27 Python
python从网络读取图片并直接进行处理的方法
May 22 Python
python自动zip压缩目录的方法
Jun 28 Python
Python中functools模块的常用函数解析
Jun 30 Python
在python3环境下的Django中使用MySQL数据库的实例
Aug 29 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
Apr 26 Python
对pandas中时间窗函数rolling的使用详解
Nov 28 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
Jun 26 Python
python中列表的含义及用法
May 26 Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
Jun 03 Python
python要安装在哪个盘
Jun 15 Python
python获取淘宝服务器时间的代码示例
Apr 22 Python
pandas中read_csv、rolling、expanding用法详解
Apr 21 #Python
Django如何使用jwt获取用户信息
Apr 21 #Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
Apr 21 #Python
Pandas之read_csv()读取文件跳过报错行的解决
Apr 21 #Python
基于python实现数组格式参数加密计算
Apr 21 #Python
python实现与redis交互操作详解
Apr 21 #Python
Django-migrate报错问题解决方案
Apr 21 #Python
You might like
PHP基于imap获取邮件实例
2014/11/11 PHP
CI框架无限级分类+递归的实现代码
2016/11/01 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
PHP实现的微信公众号扫码模拟登录功能示例
2019/05/30 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
Aster vs Newbee BO5 第三场2.19
2021/03/10 DOTA
IE与Firefox在JavaScript上的7个不同写法小结
2009/09/14 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
项目中常用的JS方法整理
2015/01/30 Javascript
JavaScript中Form表单技术汇总(推荐)
2016/06/26 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
基于vue.js 2.x的虚拟滚动条的示例代码
2018/01/23 Javascript
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
2018/04/08 Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
2019/05/23 jQuery
vue发送websocket请求和http post请求的实例代码
2019/07/11 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
2020/03/26 Javascript
vue 内联样式style中的background用法说明
2020/08/05 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
python os.listdir按文件存取时间顺序列出目录的实例
2018/10/21 Python
Python设计模式之建造者模式实例详解
2019/01/17 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
基于Python的OCR实现示例
2020/04/03 Python
垃圾回收的优点和原理
2014/05/16 面试题
机电专业个人自荐信格式模板
2013/09/23 职场文书
专业实习自我鉴定
2013/10/29 职场文书
销售经理工作职责范文
2013/12/03 职场文书
汽车维修专业个人求职信范文
2014/01/01 职场文书
活动总结范文
2014/08/30 职场文书
2015暑假社会调查报告
2015/07/13 职场文书
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers