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类装饰器用法实例
Jun 04 Python
asyncio 的 coroutine对象 与 Future对象使用指南
Sep 11 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
Sep 11 Python
Selenium定时刷新网页的实现代码
Oct 31 Python
python实现简单多人聊天室
Dec 11 Python
详解Django-restframework 之频率源码分析
Feb 27 Python
python3使用matplotlib绘制散点图
Mar 19 Python
python爬虫实现中英翻译词典
Jun 25 Python
Python企业编码生成系统之主程序模块设计详解
Jul 26 Python
PyQt5+python3+pycharm开发环境配置教程
Mar 24 Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
May 29 Python
python实现粒子群算法
Oct 15 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设置页面超时时间解决方法
2015/09/22 PHP
php实现mysql数据库连接操作及用户管理
2015/11/08 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
javascript教程之不完整的继承(js原型链)
2014/01/13 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
2015/11/19 Javascript
KnockoutJs快速入门教程
2016/05/16 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
JS实现判断数组是否包含某个元素示例
2019/05/24 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
2020/02/27 Javascript
Python中列表的一些基本操作知识汇总
2015/05/20 Python
Python import用法以及与from...import的区别
2015/05/28 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
Python 爬虫图片简单实现
2017/06/01 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
Python将字符串常量转化为变量方法总结
2019/03/17 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
2019/06/24 Python
django用户登录验证的完整示例代码
2019/07/21 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
QML实现钟表效果
2020/06/02 Python
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
程序运行正确, 但退出时却"core dump"了,怎么回事
2014/02/19 面试题
车间操作工岗位职责
2013/12/19 职场文书
会议欢迎标语
2014/06/30 职场文书
开会通知
2015/04/20 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
新闻通讯稿模板
2015/07/22 职场文书
2015年除四害工作总结
2015/07/23 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
高一作文之暖冬
2019/11/09 职场文书
某某店铺的开业庆典主持词范本
2019/11/25 职场文书
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS