进行api调用后立即刷新访问令牌,以防止会话过期

问题描述

我制作了一个定制的JWT身份验证系统,该系统将刷新令牌存储在cookie中,并将访问令牌存储为json格式。由于访问令牌的寿命很短,因此理想情况下,需要通过进行刷新api调用来刷新令牌。我已经进行了api调用。 但是我想要的是,会话除了访问令牌的过期时间外,一旦进行了另一个API调用,访问令牌的过期时间就会刷新。 最后,当刷新令牌到期时,或者两次API调用之间有足够的空闲时间,足以使访问令牌到期,我应该分别使用Sign in againrefresh access token function。 这些是我使用过的功能

获取刷新令牌

def generate_refresh_token(user):
    refresh_token_payload = {
        'user_id': user.id,'exp': datetime.datetime.utcNow() + datetime.timedelta(days=1),'iat': datetime.datetime.utcNow()
    }
    refresh_token = jwt.encode(
        refresh_token_payload,REFRESH_TOKEN_SECRET,algorithm='HS256').decode('utf-8')

    return refresh_token

获取Accesstoken

def generate_access_token(user,refresh_token):

    if not refresh_token:
        raise exceptions.PermissionDenied('No refresh token provided')
    else:
        access_token_payload = {
            'user_id': user.id,'exp': datetime.datetime.utcNow() + datetime.timedelta(days=0,minutes=20),'iat': datetime.datetime.utcNow(),}
        access_token = jwt.encode(access_token_payload,settings.SECRET_KEY,algorithm='HS256').decode('utf-8')
        return access_token

用于手动刷新访问令牌的功能
路径:localhost:8000/api/token/refresh/

@api_view(['POST'])
@permission_classes([AllowAny])
def token_refresh(request):
    Account = get_user_model()
    refresh_token = request.COOKIES.get('refreshtoken')
    print(refresh_token)
    response = Response()
    payload = jwt.decode(refresh_token,algorithms=['HS256'])
    user = Account.objects.filter(id=payload['user_id']).first()
    access_token = generate_access_token(user,refresh_token)
    # serialized_user = SignInSerializer(user).data
    response.data = {
        'access_token': access_token,'id': user.id
    }
    return response

  • 在初始登录期间调用用于创建访问和刷新令牌的函数
  • 刷新存储为cookie。
  • 用于访问和刷新的有效负载都有一个有效期限。
  • 需要在另一次呼叫后立即更新访问到期时间/完全创建一个新的访问令牌。

我觉得在每个函数/方法的开头都调用函数会很麻烦。有什么有效的方法可以实现这一过程吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)