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 xlrd读取excel日期类型的2种方法
Apr 28 Python
Python向日志输出中添加上下文信息
May 24 Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 Python
Python实现图片尺寸缩放脚本
Mar 10 Python
基于python list对象中嵌套元组使用sort时的排序方法
Apr 18 Python
python抓取网站的图片并下载到本地的方法
May 22 Python
python爬虫之验证码篇3-滑动验证码识别技术
Apr 11 Python
Python利用pandas处理Excel数据的应用详解
Jun 18 Python
python集合的创建、添加及删除操作示例
Oct 08 Python
pygame实现贪吃蛇游戏(上)
Oct 29 Python
基于python 等频分箱qcut问题的解决
Mar 03 Python
python实现简单的购物程序代码实例
Mar 03 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编程与应用
2006/10/09 PHP
php session应用实例 登录验证
2009/03/16 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
PHP文件锁定写入实例解析
2014/07/14 PHP
Yii框架实现多数据库配置和操作的方法
2017/05/25 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
window.location和document.location的区别分析
2008/12/23 Javascript
原生JS实现美图瀑布流布局赏析
2015/09/07 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
vue实现商城上货组件简易版
2017/11/27 Javascript
微信小程序中添加客服按钮contact-button功能
2018/04/27 Javascript
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
vue data恢复初始化数据的实现方法
2019/10/31 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
2020/06/16 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
[08:54]《一刀刀一天》之DOTA全时刻18:十九支奔赴西雅图队伍全部出炉
2014/06/04 DOTA
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
[58:58]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第二场
2018/04/05 DOTA
17个Python小技巧分享
2015/01/23 Python
python如何实现int函数的方法示例
2018/02/19 Python
python list元素为tuple时的排序方法
2018/04/18 Python
用Python写一段用户登录的程序代码
2018/04/22 Python
python虚拟环境迁移方法
2019/01/03 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
python版百度语音识别功能
2019/07/09 Python
简单了解python的一些位运算技巧
2019/07/13 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
澳大利亚优惠网站:Deals.com.au
2019/07/02 全球购物
法学毕业生自我鉴定
2013/11/08 职场文书
物流管理专业毕业生求职信
2014/03/23 职场文书
人事专员岗位职责
2015/02/03 职场文书