Django rest framework JWT,删除JWT令牌。

4
如何手动过期django rest framework JWT令牌?因为它不会将令牌存储在数据库中。有没有正确的方法来使令牌过期?
我考虑继续使用中间件,其中每个用户的令牌将被存储。在每个登录请求中,我们将更新用户的db中的令牌。在每个请求中,我们将从请求中获取令牌,并比较存储的令牌,如果不匹配,则返回禁止访问。我不知道这是否是一个正确的方法!

你想让令牌过期的时间是什么时候?有特定的使用情况吗? - Nagesh Dhope
这可能会对你有所帮助 https://dev59.com/IZzha4cB1Zd3GeqPGH8p。 - Nagesh Dhope
1
@NageshDhope,如果用户已经从一个设备登录,并且同一用户尝试从新设备登录,则我希望使所有其他设备的令牌过期。 - Dharm Shah
可能是重复的 https://dev59.com/SFkS5IYBdhLWcg3wamNy#39971301 - Nagesh Dhope
1个回答

2
你无法让JWT token过期,因为token是自包含的,只能在其有效载荷中存储的时间过期。你可以使用刷新和访问令牌,在访问令牌上设置短时间。这样,当访问令牌过期时,你的前端应该更新访问令牌。将刷新令牌存储在数据库中,当你需要删除访问令牌时,你可以使用刷新令牌阻止用户更新它。
编辑:如果你想将令牌存储在数据库中,你可能不想使用JWT和无状态授权。相反,要坚持使用基于会话的授权。当你想让令牌过期时,你只需从数据库中删除会话即可。
更新2:在这种情况下,人们通常使用快速访问DB(例如redis),其中有非常少的项。我们创建一个包含已被阻止的令牌的表格,而不是将jwt token存储在数据库中(我假设已删除的令牌数量远远小于存活的令牌数量)。但是,现在你以牺牲无状态授权来换取每次授权用户时检查令牌是否在数据库中的优势。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接