Json Web令牌不会过期

我刚刚实现了一个json Web令牌authentication,在我的后端我发送由jsonwebtoken创build的jsonwebtoken给客户端如下:

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

而在客户端,我只是将这个令牌存储到SessionStorage中。 事情是令牌不会在一分钟后过期,我错过了什么?

编辑:我实现了这个post中显示的相同的东西。

当没有提供一个对象作为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版本已经修复了这个问题。 更多细节在这里 。 感谢@gugol的通知。 确保你传递一个普通的对象与你需要的属性,而不是一个直接的数据库对象或类似的东西。

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

在本教程中 ,有效性检查应该引发一个exception:

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

validation也包含在jsonwebtoken包中。 这是从文档:

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