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 相关文章推荐
python3中int(整型)的使用教程
Mar 23 Python
正确理解python中的关键字“with”与上下文管理器
Apr 21 Python
Python实现将doc转化pdf格式文档的方法
Jan 19 Python
python3+PyQt5自定义视图详解
Apr 24 Python
python selenium 获取标签的属性值、内容、状态方法
Jun 22 Python
python如何生成网页验证码
Jul 28 Python
python学习之hook钩子的原理和使用
Oct 25 Python
Python读取YUV文件,并显示的方法
Dec 04 Python
详解python uiautomator2 watcher的使用方法
Sep 09 Python
python操作cfg配置文件方式
Dec 22 Python
python中图像通道分离与合并实例
Jan 17 Python
【超详细】八大排序算法的各项比较以及各自特点
Mar 31 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
基于mysql的论坛(1)
2006/10/09 PHP
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
PH P5.2至5.5、5.6的新增功能详解
2014/07/14 PHP
纯js实现背景图片切换效果代码
2010/11/14 Javascript
JS实现一键回顶功能示例代码
2013/10/28 Javascript
javascript实现的弹出层背景置灰-模拟(easyui dialog)
2013/12/27 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
JavaScript中对象属性的添加和删除示例
2014/05/12 Javascript
JavaScript职责链模式概述
2016/09/17 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
Yarn的安装与使用详细介绍
2016/10/25 Javascript
jquery+ajax实现省市区三级联动效果简单示例
2017/01/04 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
原生js+cookie实现购物车功能的方法分析
2017/12/21 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
2018/12/11 Javascript
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
JavaScript使用小插件实现倒计时的方法讲解
2019/03/11 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
python中的内置函数getattr()介绍及示例
2014/07/20 Python
Python变量和数据类型详解
2017/02/15 Python
python基于SMTP协议发送邮件
2019/05/31 Python
Python如何实现邮件功能
2020/05/27 Python
Python Merge函数原理及用法解析
2020/09/16 Python
python使用numpy中的size()函数实例用法详解
2021/01/29 Python
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
聚网科技C++面试笔试题
2015/09/01 面试题
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
学生喝酒检讨书
2014/02/06 职场文书
研究生导师推荐信
2015/03/25 职场文书
总经理年会致辞
2015/07/29 职场文书
环保主题班会教案
2015/08/13 职场文书
单位病假条范文
2015/08/17 职场文书
2016年五一促销广告语
2016/01/28 职场文书
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang