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进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
Apr 25 Python
Python的迭代器和生成器使用实例
Jan 14 Python
python实现挑选出来100以内的质数
Mar 24 Python
Python入门教程之运算符与控制流
Aug 17 Python
Python实现对文件进行单词划分并去重排序操作示例
Jul 10 Python
Python构建图像分类识别器的方法
Jan 12 Python
在python带权重的列表中随机取值的方法
Jan 23 Python
用python打印菱形的实操方法和代码
Jun 25 Python
Python开发企业微信机器人每天定时发消息实例
Mar 17 Python
Python内置函数及功能简介汇总
Oct 13 Python
如何在Win10系统使用Python3连接Hive
Oct 15 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
Feb 25 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
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
PHP实现图片旋转效果实例代码
2014/10/01 PHP
html静态页面调用php文件的方法
2014/11/13 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
PHP ADODB实现事务处理功能示例
2018/05/25 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
jquery.ui.progressbar 中文文档
2009/11/26 Javascript
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
2016/11/07 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
基于js 本地存储(详解)
2017/08/16 Javascript
微信小程序url传参写变量的方法
2018/08/09 Javascript
Vue 实现输入框新增搜索历史记录功能
2019/10/15 Javascript
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
跟老齐学Python之有容乃大的list(4)
2014/09/28 Python
Python中查看文件名和文件路径
2017/03/31 Python
python自定义异常实例详解
2017/07/11 Python
简单了解python中的与或非运算
2019/09/18 Python
Pycharm最新激活码2019(推荐)
2019/12/31 Python
python如何使用代码运行助手
2020/07/03 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
局域网标准
2016/09/10 面试题
七年级数学教学反思
2014/01/22 职场文书
酒后驾驶检讨书
2014/01/27 职场文书
公司总经理岗位职责
2014/03/15 职场文书
《风筝》教学反思
2014/04/10 职场文书
后进生评语大全
2015/01/04 职场文书
老人节主持词
2015/07/04 职场文书
青年人初次创业的“五不要”
2019/08/23 职场文书
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis