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同步)如果签名(以及可选的过期 ,受众,发行者)有效,则返回已解码的有效负载。 如果不是,则会返回错误。