【问题标题】:JWT jsonwebtoken dosen't expired in node.jsJWT jsonwebtoken 在 node.js 中没有过期
【发布时间】:2016-01-10 08:07:24
【问题描述】:

我正在使用"jsonwebtoken": "^5.4.0",我的令牌无法过期

我使用以下命令创建令牌:

var token = jwt.sign(user, app.get('superSecret'), {
    expiresInSeconds: 1
});

我的令牌就像

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJfaWQiOiI1NjFhODE5MjFhZGJmYWI2MzNlZWU4ZjciLCJ1c2VybmFtZSI6ImJhcm5vIiwicGFzc3dvcmQiOiIkMmEkMTAkcnh6SHY0dFFhbkxwVDNQOEVJSzNBTzVhLjcwNUJZdmxIOVhXOHlSVmpUMi9hNEdmTFd4YU8iLCJfX3YiOjAsImNyZWF0ZWRfYXQiOiIyMDE1LTEwLTExVDE1OjM0OjQyLjg3MFoifQ.ooELWBRlxtYwFTmJDFNOLiR6-2uR_-wjjXwPnS0c5Lk

在我的中间件中我有这个检查

jwt.verify(token, app.get('superSecret'), function (err, decoded) {
    if (err) {
        return res.json({success: false, message: 'Failed to authenticate token.'});
    } else {
        console.dir(decoded);            
        // if everything is good, save to request for use in other routes
        req.decoded = decoded;
        return res.json({success: true, token: decoded});
        next();
    }
});

我用 Postman 做一个 Post 请求就像

Post http://localhost:3000/users
with
x-access-token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJfaWQiOiI1NjFhODE5MjFhZGJmYWI2MzNlZWU4ZjciLCJ1c2VybmFtZSI6ImJhcm5vIiwicGFzc3dvcmQiOiIkMmEkMTAkcnh6SHY0dFFhbkxwVDNQOEVJSzNBTzVhLjcwNUJZdmxIOVhXOHlSVmpUMi9hNEdmTFd4YU8iLCJfX3YiOjAsImNyZWF0ZWRfYXQiOiIyMDE1LTEwLTExVDE1OjM0OjQyLjg3MFoifQ.ooELWBRlxtYwFTmJDFNOLiR6-2uR_-wjjXwPnS0c5Lk

而且我的令牌始终有效!

console.dir(decoded)
{
  "success": true,
  "token": {
    "_id": "561a81921adbfab633eee8f7",
    "username": "myuser",
  }
}

为什么我的代码总是有效的?如何强制使此代码无效,例如注销?

【问题讨论】:

  • 使用 jwt.io 的调试器查看有效负载,您的令牌不包含“exp”字段
  • 通过将过期时间更改为当前时间来强制无效

标签: javascript node.js express jwt


【解决方案1】:

库本身可能不会使令牌失效。在你的情况下签名可能是正确的,所以你得到 decoded 变量。可能你需要自己检查一下。

这是检查您实际生成的 JWT 令牌的非常有用的工具。 http://jwt.io/#debugger

【讨论】:

    【解决方案2】:

    使用 jwt.sign() 时,提供的第一个参数必须是对象。尝试如下替换您的代码。

    var token = jwt.sign({user: user}, app.get('superSecret'), {
        expiresIn: 1
    });
    

    此外,请使用 expiresIn 而不是 expiresInSeconds,因为它已被弃用。

    【讨论】:

      猜你喜欢
      • 2017-08-23
      • 2021-09-23
      • 2022-09-23
      • 2016-03-13
      • 2019-04-23
      • 2015-05-06
      • 2019-04-14
      • 2016-01-21
      • 1970-01-01
      相关资源
      最近更新 更多