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中编写ORM框架的入门指引
Apr 29 Python
python Django框架实现自定义表单提交
Mar 25 Python
简单谈谈Python中的json与pickle
Jul 19 Python
Python基础之getpass模块详细介绍
Aug 10 Python
Python实现SQL注入检测插件实例代码
Feb 02 Python
python自定义线程池控制线程数量的示例
Feb 22 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
python tkinter基本属性详解
Sep 16 Python
python飞机大战pygame游戏背景设计详解
Dec 17 Python
python 生成器需注意的小问题
Sep 29 Python
python 基于PYMYSQL使用MYSQL数据库
Dec 24 Python
如何用Python搭建gRPC服务
Jun 30 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中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
php判断邮箱地址是否存在的方法
2016/02/13 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
2016/04/01 PHP
PHP强制转化的形式整理
2020/05/22 PHP
获取DOM对象的几种扩展及简写
2006/10/09 Javascript
基于jquery的动态创建表格的插件
2011/04/05 Javascript
JS链式调用的实现方法
2013/03/07 Javascript
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
ExtJS判断IE浏览器类型的方法
2014/02/10 Javascript
JS图像无缝滚动脚本非常好用
2014/02/10 Javascript
js与jquery回车提交的方法
2015/02/03 Javascript
SWFObject基本用法实例分析
2015/07/20 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
JavaScript实现垂直滚动条效果
2017/01/18 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
js中less常用的方法小结
2017/08/09 Javascript
JavaScript实现快速排序的方法分析
2018/01/10 Javascript
Vue cli+mui 区域滚动的实例代码
2018/01/25 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
说说如何在Vue.js中实现数字输入组件的方法
2019/01/08 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
Python实现的检测网站挂马程序
2014/11/30 Python
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
Linux下升级安装python3.8并配置pip及yum的教程
2020/01/02 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
python中xlutils库用法浅析
2020/12/29 Python
python实现简单的学生管理系统
2021/02/22 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
香港百佳网上超级市场:PARKNSHOP.com
2020/06/10 全球购物
施工安全责任书范本
2014/07/24 职场文书
文案策划岗位职责
2015/02/11 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书