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 相关文章推荐
Python2.x中文乱码问题解决方法
Jun 02 Python
Python函数式编程指南(二):从函数开始
Jun 24 Python
网红编程语言Python将纳入高考你怎么看?
Jun 07 Python
win10下tensorflow和matplotlib安装教程
Sep 19 Python
python取均匀不重复的随机数方式
Nov 27 Python
关于Tensorflow 模型持久化详解
Feb 12 Python
Python爬虫爬取电影票房数据及图表展示操作示例
Mar 27 Python
Python类super()及私有属性原理解析
Jun 15 Python
Python select及selectors模块概念用法详解
Jun 22 Python
opencv 图像腐蚀和图像膨胀的实现
Jul 07 Python
一文搞懂如何实现Go 超时控制
Mar 30 Python
一文搞懂python异常处理、模块与包
Jun 26 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
使用无限生命期Session的方法
2006/10/09 PHP
使用php显示搜索引擎来的关键词
2014/02/13 PHP
js自带函数备忘 数组
2006/12/29 Javascript
JScript中的"this"关键字使用方式补充材料
2007/03/08 Javascript
JavaScript插件化开发教程 (四)
2015/01/27 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
Vue前端开发规范整理(推荐)
2018/04/23 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
使用D3.js+Vue实现一个简单的柱形图
2018/08/05 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
three.js利用卷积法如何实现物体描边效果
2019/11/27 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
[54:17]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第二场 1月10日
2021/03/11 DOTA
python计算最大优先级队列实例
2013/12/18 Python
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
python自带的http模块详解
2016/11/06 Python
Python中一行和多行import模块问题
2018/04/01 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
搞清楚 Python traceback的具体使用方法
2019/05/13 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
django 快速启动数据库客户端程序的方法示例
2019/08/16 Python
python重要函数eval多种用法解析
2020/01/14 Python
澳洲网红粉泥面膜:Sand & Sky
2019/08/13 全球购物
优秀党员转正的自我评价
2013/10/06 职场文书
高中班级口号
2014/06/09 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
实习推荐信格式模板
2015/03/27 职场文书
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android
Go语言 详解net的tcp服务
2022/04/14 Golang