Python 基于jwt实现认证机制流程解析
作者:jalen-tian 时间:2022-07-15 00:25:30
1.jwt的优缺点
jwt的优点:
1. 实现分布式的单点登陆非常方便
2. 数据实际保存在客户端,所以我们可以分担数据库或服务器的存储压力
jwt的缺点:
1. 数据保存在了客户端,我们服务端只认jwt,不识别客户端。
2. jwt可以设置过期时间,但是因为数据保存在了客户端,所以对于过期时间不好调整。
2.安装jwt
pip install djangorestframework-jwt -i https://pypi.douban.com/simple
3.在settings.dev中
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
}
import datetime
JWT_AUTH = {
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1), ##设置token的有效值
}
4.手动生成jwt
from rest_framework_jwt.settings import api_settings
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
5.后端实现登陆认证接口(在子应用路由urls.py中)
from rest_framework_jwt.views import obtain_jwt_token
urlpatterns = [
path(r'login/', obtain_jwt_token), ##提供接口
]
6.自定义返回数据,(user.utils.jwt_response_payload_handler路径下)
def jwt_response_payload_handler(token, user=None, request=None):
"""
自定义jwt认证成功返回数据
"""
return {
'token': token,
'id': user.id,
'username': user.username
}#这个是自定义jwt认证成功返回数据,一般会放在子应用下utils文件中,然后在settings中配置,将路径告诉django
7.修改settings.dev配置文件
# JWT
JWT_AUTH = {
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
'JWT_RESPONSE_PAYLOAD_HANDLER': 'user.utils.jwt_response_payload_handler',
}
来源:https://www.cnblogs.com/jalen-123/p/13167973.html
标签:python,jwt,认证,机制
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
django form和field具体方法和属性说明
2023-07-24 11:22:45
Python关于OS文件目录处理的实例分享
2022-12-29 08:52:07
Python实现人脸识别
2022-10-01 06:06:24
![](https://img.aspxhome.com/file/2023/9/80809_0s.png)
Oracle SecureFile的功能第1/4页
2009-06-19 18:07:00
Python使用PyAudio制作录音工具的实现代码
2023-09-07 22:36:46
![](https://img.aspxhome.com/file/2023/8/67398_0s.png)
jquery validate.js表单验证的基本用法入门
2023-07-02 05:30:47
基于go+vue实现的golang每日新闻数据浏览与检索平台(推荐)
2023-06-16 12:11:26
![](https://img.aspxhome.com/file/2023/6/89026_0s.jpg)
浅谈一下基于Pytorch的可视化工具
2022-12-28 23:08:07
![](https://img.aspxhome.com/file/2023/2/128452_0s.png)
Python使用Numpy模块读取文件并绘制图片
2022-03-11 07:11:58
![](https://img.aspxhome.com/file/2023/0/133430_0s.png)
MySql数据类型教程示例详解
2024-01-27 05:23:47
![](https://img.aspxhome.com/file/2023/9/78109_0s.png)
python实现日历效果
2022-07-20 22:22:57
![](https://img.aspxhome.com/file/2023/2/123622_0s.jpg)
一个Python优雅的数据分块方法详解
2022-08-22 01:40:04
国产化设备鲲鹏CentOS7上源码安装Python3.7的过程详解
2023-04-23 14:08:42
Flask 入门系列 Cookie与session的介绍
2022-06-21 00:45:44
![](https://img.aspxhome.com/file/2023/9/103769_0s.png)
Python 中如何写注释
2022-07-10 21:53:11
haskell实现多线程服务器实例代码
2021-08-06 00:08:22
用 python 进行微信好友信息分析
2022-03-29 15:52:44
![](https://img.aspxhome.com/file/2023/1/121381_0s.png)
浅析使用JDBC操作MySQL需要添加Class.forName("com.mysql.jdbc.Driver")
2024-01-21 23:08:48
![](https://img.aspxhome.com/file/2023/6/70466_0s.png)
《JavaScript语言精粹》译者序及样章试读
2009-04-03 11:38:00
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
2023-01-05 22:25:57