我想问一下,当我使用 JWT 时注销是否是一个好主意。
要登录,我发送一个带有用户名和密码的发布请求,以获取所需的令牌(保存到 localStorage 中),当然,这将允许我向需要令牌的视图发送进一步的请求。
但我不确定应该如何注销用户。我可以清除 localStorage,但令牌仍然可用。
所以,我想问我是否应该使用刷新令牌,因为我无法禁用它。
你是对的,即使在删除 JWT 令牌之后,它仍然会在一段时间内保持有效令牌,直到过期。 JWT 是无状态的。因此,如果您想处理注销并使令牌无效,您必须需要保留数据库或内存缓存来存储无效(列入黑名单)令牌。然后你需要添加一个新的权限来检查令牌是否被列入黑名单。
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
令牌过期后,您可以将其从黑名单中删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)