【Python_Flask系列之_JWT+Redis的token管理(包含失效)】

3 篇文章 1 订阅
1 篇文章 0 订阅

【Python_Flask系列之_JWT+Redis的token管理(包含失效)】


前言


一、JWT是什么?

简单点说就是一种认证机制,让后台知道该请求是来自于受信的客户端。

二、使用步骤

1.引入库

代码如下(示例):

import jwt
from jwt import exceptions

2.生成token

代码如下(示例):

# 生成token
def create_token(username):
    # 构造payload
    obj = User.query.filter_by(username=username).first()
    uuid = obj.uuid
    payload = {
        "username": username,
        "uuid": uuid,  # 用户id
        "exp": datetime.datetime.now() + datetime.timedelta(hours=2)  # 超时时间
    }
    result = jwt.encode(payload=payload, key=SALT, algorithm="HS256", headers=headers)
    return result

3.校验token

代码如下(示例):

# 校验token
def verify_jwt(token, secret=None):
    """
    校验jwt
    :param token: jwt
    :param secret: 秘钥
    :return: dict:payload
    """
    if not secret:
        secret = Config.SECRET_KEY
    try:
        payload = jwt.decode(token, secret, algorithms=["HS256"])
        return payload
    except exceptions.ExpiredSignatureError:  # token已失效
        return 1
    except jwt.DecodeError:  # token认证失败
        return 2
    except jwt.InvalidTokenError:  # 非法的token
        return 3

4.JWT+Redis的token管理(包含失效)

1)、生成token并存入redis中

在这里插入图片描述

2)、携带token请求数据

在这里插入图片描述

3)、不携带/错误的token请求数据

在这里插入图片描述

4)、登录退出使得token失效

在这里插入图片描述

5)、再次使用登录退出前的token,token已经失效

在这里插入图片描述

总结

本次使用了白名单的思路,登录时将token存入redis中,登录退出时将token移除redis中,登录退出后原来的token已失效,无法使用之前的token,需要再次登录获取新的token操作业务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值