Python 基于jwt实现认证机制流程解析
作者:jalen-tian 发布时间:2022-07-15 00:25:30
标签:python,jwt,认证,机制
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
0
投稿
猜你喜欢
- 近来有客户要求用table显示一大串数据,由于滚动后就看不到表头,很不方便,所以想到这个效果。上次做table排序对table有了一些了解,
- 一、简介Python:英 -[‘paɪθ ə n]或[‘paɪθɑn] * 诞生 可用于软件开发:游戏后台、搜索、图形界面,网站,C\S(
- 前言在进行业务数据分析时,往往需要使用pandas计算环比、同比及增长率等指标,为了能够更加方便的进行的统计数据,整理方法如下。1.数据准备
- 知识点: 函数 replicate 以下代码是实现如下功能: 代码如下:declare @sql varchar(200), --需填充的字
- pycharm永久激活码6ZUMD7WWWU-eyJsaWNlbnNlSWQiOiI2WlVNRDdXV1dVIiwibGljZW5zZWV
- sysdate+(5/24/60/60) 在系统时间基础上延迟5秒 sysdate+5/24/60 在系统时间基础上延迟5分钟 sysdat
- 写程序的人在编写由asp页面生成静态页面html的时候,如果同时生成大量页面,一定遇到过浏览器下方的进度条上显示着3%,6%,10%等缓慢增
- PHP getNamespaces() 函数实例返回 XML 文档中使用的命名空间:<?php $xml=<<<XM
- 前言:Python是世界上最流行的解释型编程语言之一。Python 由 Guido van Rossum 设计,作为“ABC”编程语言的继承
- Python 2.x 很快就要 失去官方支持 了,尽管如此,从 Python 2 迁移到 Python 3 却并没有想象中那么难。我在上周用
- jQuery的选择器是CSS 1-3,XPath的结合物。jQuery提取这二种查询语言最好的部分,融合后创造出了最终的jQuery表达式查
- FTP服务的主动模式和被动模式在开始之前,先聊一下FTP的主动模式和被动模式,两者的区别 , 用两张图来表示可能会更加清晰一些:主动模式:主
- 本文实例讲述了python实现通过代理服务器访问远程url的方法。分享给大家供大家参考。具体如下:import urllibproxies
- split()介绍函数:split()Python中有split()和os.path.split()两个函数,具体作用如下:split():
- 在ASP中,为什么有时候刷新页面后,重新执行ASP代码时就连不上数据库了?这种情况一般发生在动态IP分配中,由于ASP连接数据库是定时的,默
- 利用oracle的dbms_random包结合rownum来实现,示例如下,随机取499户:select * from ( select *
- 1.认证与授权1.验证:身份验证是验证个人或设备标识的过程。身份验证过程之一是登录过程。注册网站后,您的信息(ID,密码,名称,电子邮件等)
- 本文实例为大家分享了Python之给我一面国旗的具体代码,供大家参考,具体内容如下1、“给我一面国旗@微信官方”今天“给我一面国旗@微信官方
- 前言python下的setuptools带有一个easy_install的工具,在安装python的每三方模块、工具时很有用,也很方便。安装
- 1、主题毫无疑问Pycharm是一个具有强大快捷键系统的IDE,这就意味着你在Pycharm中的任何操作,例如打开一个文件、切换编辑区域等,