django simple jwt自动续期策略

6 篇文章 0 订阅
2 篇文章 0 订阅

方案

1.登录过后给前端进行返回token并设置了过期时间30分钟,每次请求的时候前端把token存在请求头里面进行发请求,后端接收请求的时候获取请求头出来进行jwt解析判断过期时间是否小于30分钟,如果小于30分钟就生成新的token在responseHearde进行返回即可
2.当某个用户触发事件时,使用中间件,后端检测发现token 快要到过期时间 ,
生成新的token以及refresh_token ,更新 redis缓存中的token信息,
后面前端请求Header中设置的token保持不变,校验有效性以缓存中的token为准

我这边用的第一种方案
中间件

from django.utils import deprecation
from xxxxxximport tools as ts
from django.core.cache import cache
from xxxxxximport settings as  config

class MyMiddleware(deprecation.MiddlewareMixin):
    def __init__(self, get_response=None):
        self.get_response = get_response

        def process_response(self, request, response):
        auth_token = request.META.get('HTTP_AUTHORIZATION')
        # 是否携带 access_token
        if auth_token:
            # 对 收到的 头部 access_token 进行处理
            auth_token = str(auth_token).replace('Bearer ', '')
            # 收到认证的 access_token 不在白名单以及黑名单
            if not cache.has_key(auth_token + config.JWT_WHITE_LIST_TAG) and not cache.has_key(
                    auth_token + config.JWT_BLACK_LIST_TAG):
                time_remaining = ts.output_time_remaining(auth_token)
                # access_token 快要过期的时间
                if time_remaining > 0:
                    # access_token 有效剩余时间 小于或等于 配置自动设置 token过期时间
                    if time_remaining <= config.JWT_TAG_TIME:
                        # 获取当前用户对象
                        user = request.user
                        new_token = ts.Create_token().validate(user)["token"]
                        response["NEW_HTTP_AUTHORIZATION"] = new_token
                        # 缓存 快要失效的 用户对象设置白名单  值 --->  用户对象        过期时间 ------>  原access_token 过期时间
                        cache.set(auth_token + config.JWT_WHITE_LIST_TAG, {"user_obj": user}, time_remaining)
        return response

具体整体代码就不细写
整体流程图 :
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值