gpt4 book ai didi

django - 注销 Django Rest Framework JWT

转载 作者:行者123 更新时间:2023-12-04 17:06:46 25 4
gpt4 key购买 nike

我想问一下,当我使用 JWT 时注销是否是一个好主意。
为了登录,我发送一个带有用户名和密码的 post 请求以获取所需的 token (保存到 localStorage 中),当然,这将允许我向需要 token 的 View 发送进一步的请求。

但我不确定我应该如何注销用户。我可以清除 localStorage,但 token 仍然可用。

所以,我想问一下我是否应该使用刷新 token ,因为我无法禁用它。

最佳答案

您是对的,即使在您删除 JWT token 后,它仍会在一段时间内保持有效 token ,直到它过期。 JWT 是无状态的。因此,如果要处理注销并使 token 无效,则必须保留数据库或内存缓存以存储无效(列入黑名单)的 token 。然后你需要添加一个新的权限来检查 token 是否被列入黑名单。

class BlackListedToken(models.Model):
token = models.CharField(max_length=500)
user = models.ForeignKey(User, related_name="token_user", on_delete=models.CASCADE)
timestamp = models.DateTimeField(auto_now=True)

class Meta:
unique_together = ("token", "user")


class IsTokenValid(BasePermission):
def has_permission(self, request, view):
user_id = request.user.id
is_allowed_user = True
token = request.auth.decode("utf-8")
try:
is_blackListed = BlackListedToken.objects.get(user=user_id, token=token)
if is_blackListed:
is_allowed_user = False
except BlackListedToken.DoesNotExist:
is_allowed_user = True
return is_allowed_user

token 到期后,您可以将其从黑名单中移除。

关于django - 注销 Django Rest Framework JWT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52431850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com