2014-05-13 45 views
5

我只是实现了一个JSON网络令牌认证,对我的后端我送这是由jsonwebtoken创建到客户端以下令牌:JSON网络令牌不会过期

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

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

编辑:我实现了this后显示相同的东西。

回答

3

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

this tutorial,有效性检查应该抛出一个异常:

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

    // handle token here 

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

验证也包含在jsonwebtoken包。这是从文档:

(同步与回调)返回解码。如果 签名(以及可选到期,观众,发行人)有效载荷。如果 不是,它将返回错误。

+1

嘿达文,谢谢你的回答。问题在于它们的源代码,因为你看到时间乘以1000,并且他们在10天前修复了它。https://github.com/auth0/node-jsonwebtoken/commit/44ed992ee58a90db3fc4a05d08cdf8356ba515c1 – anvarik

19

当没有提供对象作为第一个参数到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对象,如猫鼬。 5.5.2版本对此有一个修复。更多详情here。感谢@gugol的通知。确保你传递一个普通的对象与你需要的属性,而不是一个直接的数据库对象或类似的东西。

+0

哇。这让我疯狂。谢谢Marius。 –

+2

我传递给它一个对象,但令牌不会过期。我正在使用'expiresIn:60',因为现在不推荐使用“expiresInMinutes”。 – gugol

+0

@gugol你应该在github上打开一个新的问题,或者在这里创建一个新的问题,然后用你完整的用法例子。 –