【问题标题】:Json web token does not expireJson Web 令牌不会过期
【发布时间】:2014-06-30 20:46:45
【问题描述】:

我刚刚实现了一个 json Web 令牌身份验证,在我的后端我将 jsonwebtoken 创建的令牌发送给客户端,如下所示:

var token = jwt.sign(user, secret.secretToken, { expiresInMinutes: 1 });
return res.json({ token: token });

在客户端,我只是将此令牌存储到 SessionStorage。问题是令牌在一分钟后不会过期,我错过了什么吗?

编辑:我实现了与this 帖子中显示的相同的东西。

【问题讨论】:

    标签: node.js jwt express-jwt


    【解决方案1】:

    我发现自己在不提供对象作为jwt.sign 的第一个参数时遇到了同样的问题,例如jwt.sign('testuser', secret.secretToken, { expiresIn: '1h' });.

    jwt.sign 的这种错误用法即使是错误的也确实有效,它只是忽略了提供的设置。 https://github.com/auth0/node-jsonwebtoken/issues/64

    确保提供一个对象作为第一个参数,例如jwt.sign({user: 'testuser'}, secret.secretToken, { expiresIn: '1h' });

    更新: 据报道,使用非标准 javascript 对象存在问题,例如来自 mongoose。版本 5.5.2 对此进行了修复。更多详情here。感谢@gugol 的通知。确保传递具有所需属性的普通对象,而不是直接数据库对象或类似对象。

    【讨论】:

    • 哇。这让我发疯了。谢谢马吕斯。
    • 我正在向它传递一个对象,但令牌仍然没有过期。我正在使用expiresIn:60,因为“expiresInMinutes”现在已被弃用。
    • @gugol 您应该在 github 上打开一个新问题或在此处创建一个新问题,并附上您的完整用法示例。
    • @MariusRumpf 我做了,但我还没有得到答案:github.com/auth0/node-jsonwebtoken/issues/147
    【解决方案2】:

    令牌不会自动从会话存储中删除。但是,如果您尝试验证令牌是否有效,则过期的令牌应该是无效的。

    来自this tutorial,有效性检查应该抛出异常:

    if (token) {
      try {
        var decoded = jwt.decode(token, app.get('jwtTokenSecret'));
    
        // handle token here
    
      } catch (err) {
        return next();
      }
    } else {
      next();
    }
    

    验证也包含在jsonwebtoken 包中。这是来自文档:

    (与回调同步)返回解码的有效负载,如果 签名(以及可选的到期、受众、发行者)是有效的。如果 不,它会返回错误。

    【讨论】:

    • 嗨,戴文,感谢您的回答。问题出在他们的源代码中,正如您所见,时间乘以 1000 之前,他们在 10 天前修复了它github.com/auth0/node-jsonwebtoken/commit/…
    • 应该使用jwt.verify方法而不是jwt.decode方法。
    【解决方案3】:
    //use this to create the token
    
      var token = jwt.sign({
      exp: "1h",
      data: "payload"
       }, "secret");
    
    /*while checking the token ,Throws error if the token is expired else you will get the decoded data*/
    
    jwt.verify(token, 'secret', function(err, decoded) {
      if (err) {
        /*
          err = {
            name: 'TokenExpiredError',
            message: 'jwt expired',
            expiredAt: 1408621000
          }
        */
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2017-11-01
      • 2017-04-26
      • 1970-01-01
      • 2021-03-01
      • 2019-07-04
      • 2019-08-05
      • 1970-01-01
      • 2022-01-27
      • 2016-08-01
      相关资源
      最近更新 更多