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的正则表达式re模块的常用方法
Mar 09 Python
Django中模型Model添加JSON类型字段的方法
Jun 17 Python
实例解析Python的Twisted框架中Deferred对象的用法
May 25 Python
Python与Java间Socket通信实例代码
Mar 06 Python
unittest+coverage单元测试代码覆盖操作实例详解
Apr 04 Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 Python
pyinstaller参数介绍以及总结详解
Jul 12 Python
python程序 线程队列queue使用方法解析
Sep 23 Python
Django Path转换器自定义及正则代码实例
May 29 Python
Virtualenv 搭建 Py项目运行环境的教程详解
Jun 22 Python
Python调用飞书发送消息的示例
Nov 10 Python
详解Python中list[::-1]的几种用法
Nov 16 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中foreach/in_array的使用
2015/11/02 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
2016/09/22 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
jQuery 使用手册(三)
2009/09/23 Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
2013/08/02 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
2015/04/07 Javascript
Javascript实现Array和String互转换的方法
2015/12/21 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
脚本div实现拖放功能(两种)
2017/02/13 Javascript
vue音乐播放器插件vue-aplayer的配置及其使用实例详解
2017/07/10 Javascript
基于jQuery的表单填充实例
2017/08/22 jQuery
bootstrap轮播模板使用方法详解
2017/11/17 Javascript
bmob js-sdk 在vue中的使用教程
2018/01/21 Javascript
深入理解js 中async 函数的含义和用法
2018/05/13 Javascript
微信小程序实现自上而下字幕滚动
2018/07/14 Javascript
vue+element实现打印页面功能
2019/05/20 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
Python实现将HTML转换成doc格式文件的方法示例
2017/11/20 Python
Python爬虫实现(伪)球迷速成
2018/06/10 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
pytorch 预训练层的使用方法
2019/08/20 Python
Python实现图像的垂直投影示例
2020/01/17 Python
python实现门限回归方式
2020/02/29 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
Python调用shell cmd方法代码示例解析
2020/06/18 Python
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
意大利火车票和铁路通行证专家:ItaliaRail
2019/01/22 全球购物
开展批评与自我批评发言材料
2014/10/17 职场文书
西柏坡导游词
2015/02/05 职场文书
道歉短信大全
2015/05/12 职场文书
Jsonp劫持学习
2021/04/01 PHP
一文搞懂Java中的注解和反射
2022/06/21 Java/Android