如何解决进行api调用后立即刷新访问令牌,以防止会话过期
我制作了一个定制的JWT身份验证系统,该系统将刷新令牌存储在cookie中,并将访问令牌存储为json格式。由于访问令牌的寿命很短,因此理想情况下,需要通过进行刷新api调用来刷新令牌。我已经进行了api调用。
但是我想要的是,会话除了访问令牌的过期时间外,一旦进行了另一个API调用,访问令牌的过期时间就会刷新。
最后,当刷新令牌到期时,或者两次API调用之间有足够的空闲时间,足以使访问令牌到期,我应该分别使用Sign in again
或refresh 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 举报,一经查实,本站将立刻删除。