Json网络令牌不会过期

时间:2014-05-13 08:58:54

标签: node.js jwt express-jwt

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

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

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

编辑:我实施了this帖子中显示的相同内容。

3 个答案:

答案 0 :(得分:20)

当我没有提供一个对象作为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的通知。确保传递具有所需属性的普通对象,而不是直接数据库对象或类似对象。

答案 1 :(得分:4)

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

this tutorial开始,有效性检查会抛出异常:

if (token) {
  try {
    var decoded = jwt.decode(token, app.get('jwtTokenSecret'));

    // handle token here

  } catch (err) {
    return next();
  }
} else {
  next();
}

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

  

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

答案 2 :(得分:0)

fetch