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 23 Python
Python实现的数据结构与算法之双端队列详解
Apr 22 Python
一步步教你用Python实现2048小游戏
Jan 19 Python
python中numpy包使用教程之数组和相关操作详解
Jul 30 Python
python2 与 python3 实现共存的方法
Jul 12 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
在Pandas中给多层索引降级的方法
Nov 16 Python
django 多对多表的创建和插入代码实现
Sep 09 Python
python 成功引入包但无法正常调用的解决
Mar 09 Python
Python脚本实现Zabbix多行日志监控过程解析
Aug 26 Python
如何在windows下安装配置python工具Ulipad
Oct 27 Python
virtualenv隔离Python环境的问题解析
Jun 21 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
怎样在UNIX系统下安装php3
2006/10/09 PHP
PHP 实现多服务器共享 SESSION 数据
2009/08/15 PHP
php短址转换实现方法
2015/02/25 PHP
php实现微信扫码自动登陆与注册功能
2016/09/22 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
thinkphp5 模型实例化获得数据对象的教程
2019/10/18 PHP
有趣的JavaScript数组长度问题代码说明
2011/01/20 Javascript
jQuery知识点整理
2015/01/30 Javascript
在Mac OS下使用Node.js的简单教程
2015/06/24 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
2017/06/08 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
利用JavaScript模拟京东按键输入功能
2020/12/01 Javascript
Python使用urllib2获取网络资源实例讲解
2013/12/02 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
利用python如何在前程无忧高效投递简历
2019/05/07 Python
django框架创建应用操作示例
2019/09/26 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
python爬虫模拟浏览器访问-User-Agent过程解析
2019/12/28 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
2020/06/11 Python
python3 循环读取excel文件并写入json操作
2020/07/14 Python
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
数据库连接池的工作原理
2012/09/26 面试题
应届大学生自荐信
2013/12/05 职场文书
网络信息安全承诺书
2014/03/26 职场文书
药品业务员岗位职责
2014/04/17 职场文书
2014年领导班子工作总结
2014/12/11 职场文书
对外汉语教师推荐信
2015/03/27 职场文书
python实现的web监控系统
2021/04/27 Python
Python手拉手教你爬取贝壳房源数据的实战教程
2021/05/21 Python
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS