如何在没有到期时间的情况下使 JWT 令牌无效

6 javascript authentication token node.js jwt

我正在使用 JWT 创建一个 node.js 后端应用程序。对我来说,要求很简单,即授权令牌不应有任何到期时间。但是当用户更改密码时,我在使 JWT 无效的过程中遇到了问题。

当用户更改他的密码时,我将创建一个新的 JWT 令牌,并删除旧令牌,但用户仍然可以使用他的旧 JWT 令牌(来自其他登录的设备)并可以访问应用程序。

那么谁能告诉我如何避免这种情况?

小智 15

JWT 的 exp 声明是可选的。如果令牌没有它,则认为它没有过期

根据https://www.npmjs.com/package/jsonwebtoken的文档,expiresIn 字段也没有默认值,因此只需省略它即可。

var token = jwt.sign({email:'sivamanismca@gmail.com',role:'User'}, "Secret", {});
Run Code Online (Sandbox Code Playgroud)


Gop*_*iva 9

对我来说似乎是一个熟悉的问题,我已经回答了类似的问题Best Practices to Invalidate a JWT Token

所以解决你的问题的步骤如下,

当用户登录时,在他的用户数据库中创建一个没有过期时间的登录令牌。

因此,在使 JWT 无效时,请按照以下步骤操作,

  • 检索用户信息并检查令牌是否在他的用户数据库中。如果允许。
  • 当用户注销时,仅从其用户数据库中删除此令牌。
  • 当用户更改他的密码时,从他的用户数据库中删除所有令牌并要求他再次登录。

所以基本上你需要将令牌存储在用户的数据库中并在失效时使用它。简单的 :)