django使用JWT保存用户登录信息

作者:苦瓜爆炒牛肉 时间:2022-02-19 17:36:58 

在使用前必须弄明白JWT的相关知识,可以看我的另一篇博文:https://www.jb51.net/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进行校验,如果有修改就不会通过,如果过期了也不会通过。

来源:https://www.cnblogs.com/chichung/p/9967325.html

标签:django,jwt,保存信息
0
投稿

猜你喜欢

  • 彻底弄懂CSS盒子模式之二(导航栏实例)

    2007-05-11 16:52:00
  • SQL查询语句优化的实用方法总结

    2024-01-25 18:51:21
  • MySQL模糊查询用法大全(正则、通配符、内置函数)

    2024-01-22 13:48:50
  • 定位?浮动?自适应?

    2008-06-30 14:20:00
  • 解决tensorflow测试模型时NotFoundError错误的问题

    2021-08-02 09:33:56
  • python操作摄像头截图实现远程监控的例子

    2022-01-04 19:59:42
  • MySQL模式 Strict Mode知识点详解

    2024-01-27 20:50:41
  • python中的decorator的作用详解

    2021-05-24 16:44:40
  • MySQL中使用去重distinct方法的示例详解

    2024-01-28 04:37:10
  • Spring Batch读取txt文件并写入数据库的方法教程

    2024-01-27 03:59:32
  • 举例详解JavaScript中Promise的使用

    2024-06-05 09:58:07
  • 为你的有序列表添加个性样式

    2009-02-23 13:12:00
  • python ElementTree 基本读操作示例

    2022-10-23 07:27:25
  • SpringBoot 中使用JSP的方法示例

    2023-06-16 22:35:09
  • Vue自定义指令实现弹窗拖拽四边拉伸及对角线拉伸效果

    2024-05-28 15:43:08
  • 安装2019Pycharm最新版本的教程详解

    2023-06-25 23:27:54
  • Mysql数据库实现多字段过滤的方法

    2024-01-16 11:35:48
  • python实现随机梯度下降(SGD)

    2021-04-15 19:41:20
  • Python OpenCV实现视频追踪

    2021-09-29 23:04:27
  • python多进程 主进程和子进程间共享和不共享全局变量实例

    2022-11-05 11:42:56
  • asp之家 网络编程 m.aspxhome.com