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正则表达式如何进行字符串替换实例
Dec 28 Python
python进阶之多线程对同一个全局变量的处理方法
Nov 09 Python
Python实现多进程的四种方式
Feb 22 Python
Python3 集合set入门基础
Feb 10 Python
python实现银行实战系统
Feb 26 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
Mar 23 Python
python能自学吗
Jun 18 Python
python将数据插入数据库的代码分享
Aug 16 Python
详解Python中Pyyaml模块的使用
Oct 08 Python
python-地图可视化组件folium的操作
Dec 14 Python
python网络爬虫实现发送短信验证码的方法
Feb 25 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 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
smarty模板中拼接字符串的方法
2014/02/14 PHP
php中socket通信机制实例详解
2015/01/03 PHP
PHP实现打包下载文件的方法示例
2017/10/07 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
jquery 全局AJAX事件使用代码
2010/11/05 Javascript
JS 面向对象之神奇的prototype
2011/02/26 Javascript
原生javascript实现图片弹窗交互效果
2015/01/12 Javascript
JavaScript知识点整理
2015/12/09 Javascript
jQuery实现下拉加载功能实例代码
2016/04/01 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
react中的ajax封装实例详解
2017/10/17 Javascript
Vue.js 2.5新特性介绍(推荐)
2017/10/24 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
Python基于分水岭算法解决走迷宫游戏示例
2017/09/26 Python
django输出html内容的实例
2018/05/27 Python
Python使用folium excel绘制point
2019/01/03 Python
Python中super函数用法实例分析
2019/03/18 Python
python开头的coding设置方法
2019/08/08 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
Python OrderedDict字典排序方法详解
2020/05/21 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
pandas数据分组groupby()和统计函数agg()的使用
2021/03/04 Python
HTML5 3D书本翻页动画的实现示例
2019/08/28 HTML / CSS
几个常见的软件测试问题
2016/09/07 面试题
交通文明倡议书
2014/05/16 职场文书
学校地质灾害防治方案
2014/06/10 职场文书
绘画专业自荐信
2014/07/04 职场文书
司机岗位职责说明书
2014/07/29 职场文书
婚前协议书标准版
2014/10/19 职场文书
计算机专业自荐信
2015/03/05 职场文书
车辆管理制度范本
2015/08/05 职场文书
《童年的发现》教学反思
2016/02/18 职场文书