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实现类似jQuery使用中的链式调用的示例
Jun 16 Python
Python 正则表达式入门(初级篇)
Dec 07 Python
详解Python基础random模块随机数的生成
Mar 23 Python
Python发展史及网络爬虫
Jun 19 Python
django rest framework vue 实现用户登录详解
Jul 29 Python
Python数据可视化:幂律分布实例详解
Dec 07 Python
python3 动态模块导入与全局变量使用实例
Dec 22 Python
TensorFlow实现指数衰减学习率的方法
Feb 05 Python
用Python绘制漫步图实例讲解
Feb 26 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
Feb 28 Python
使用keras2.0 将Merge层改为函数式
May 23 Python
分析Python list操作为什么会错误
Nov 17 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
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
php实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
php表单敏感字符过滤类
2014/12/08 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
javascript prototype 原型链
2009/03/12 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
js将json格式的对象拼接成复杂的url参数方法
2016/05/25 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
2016/10/15 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
Python性能优化技巧
2015/03/09 Python
Python学习教程之常用的内置函数大全
2017/07/14 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
python字典的setdefault的巧妙用法
2019/08/07 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
2019/12/18 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
Web前端页面跳转并取到值
2017/04/24 HTML / CSS
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
德国旅游网站:weg.de
2018/06/03 全球购物
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
优秀员工个人的自我评价
2013/11/29 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
小学六一主持词开场白
2015/05/28 职场文书
复兴之路观后感
2015/06/02 职场文书
2015年政教主任工作总结
2015/07/23 职场文书