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使用PIL模块实现给图片打水印的方法
May 22 Python
python 网络编程常用代码段
Aug 28 Python
Python实现在某个数组中查找一个值的算法示例
Jun 27 Python
Python爬取个人微信朋友信息操作示例
Aug 03 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
nohup后台启动Python脚本,log不刷新的解决方法
Jan 14 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
python求绝对值的三种方法小结
Dec 04 Python
使用Python将图片转正方形的两种方法实例代码详解
Apr 29 Python
Django多数据库联用实现方法解析
Nov 12 Python
Python基于unittest实现测试用例执行
Nov 25 Python
python 实现IP子网计算
Feb 18 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 安全过滤函数代码
2011/05/07 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
2020/03/18 PHP
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
2010/06/11 Javascript
教你如何使用PHP输出中文JSON字符串
2014/05/22 Javascript
js实现DOM走马灯特效的方法
2015/01/21 Javascript
jQuery的promise与deferred对象在异步回调中的作用
2016/05/03 Javascript
关于json字符串与实体之间的严格验证代码
2016/11/10 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
关于vue中 $emit的用法详解
2018/04/12 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
[59:15]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.20
2020/11/20 DOTA
Python下的Mysql模块MySQLdb安装详解
2014/04/09 Python
python中的格式化输出用法总结
2016/07/28 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
Python DataFrame 设置输出不显示index(索引)值的方法
2018/06/07 Python
python实现电脑自动关机
2018/06/20 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
Python Unittest原理及基本使用方法
2020/11/06 Python
canvas实现图片镜像翻转的2种方式
2020/07/22 HTML / CSS
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
JustFab加拿大:女鞋、靴子、手袋和服装在线
2018/05/18 全球购物
三星法国官方网站:Samsung法国
2019/10/31 全球购物
澳大利亚厨房和家用电器购物网站:Bing Lee
2021/01/11 全球购物
测试工程师职业规划书
2014/02/06 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
物业管理专业自荐信
2014/07/01 职场文书
工会2014法制宣传日活动总结
2014/11/01 职场文书
2014年人事工作总结范文
2014/11/19 职场文书
励志语录:只有自己足够强大,才能不被别人践踏
2020/01/09 职场文书
python实现商品进销存管理系统
2022/05/30 Python
Nginx报错104:Connection reset by peer问题的解决及分析
2022/07/23 Servers