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实现约瑟夫环问题的方法
May 03 Python
Centos Python2 升级到Python3的简单实现
Jun 21 Python
Django卸载之后重新安装的方法
Mar 15 Python
Python线程创建和终止实例代码
Jan 20 Python
Python中pillow知识点学习
Apr 30 Python
python pygame实现2048游戏
Nov 20 Python
使用pandas实现csv/excel sheet互相转换的方法
Dec 10 Python
Django实现图片上传功能步骤解析
Apr 22 Python
python代码中怎么换行
Jun 17 Python
一些关于python 装饰器的个人理解
Aug 31 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
Nov 17 Python
Python实现批量将文件复制到新的目录中再修改名称
Apr 12 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中curl使用指南
2015/02/05 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
打开超链需要“确认”对话框的方法
2007/03/08 Javascript
JavaScript中的事件处理
2008/01/16 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
2013/04/26 Javascript
控制文字内容的显示与隐藏示例
2014/06/11 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
使用百度地图api实现根据地址查询经纬度
2014/12/11 Javascript
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
JS轮播图中缓动函数的封装
2020/11/25 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
2019/07/05 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
python中map、any、all函数用法分析
2015/04/21 Python
Python Matplotlib库入门指南
2015/05/18 Python
详解Python做一个名片管理系统
2019/03/14 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
HTML5实现获取地理位置信息并定位功能
2015/04/25 HTML / CSS
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
会计毕业生自我鉴定
2013/11/04 职场文书
外贸实习生自荐信范文
2013/11/24 职场文书
销售顾问工作计划书
2014/09/15 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
祝福语集锦:给满月宝宝的祝福语
2019/11/20 职场文书
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS