我正在使用JWT-Node.js中的jsonwebtokens。
我正在创建一个令牌,如果令牌过期,我想抛出一个错误。我的令牌已成功创建,并且我正在Expressjs中的Apis中间件中检查令牌到期。然后从Angular的标头中发送令牌,并在中间件中检查到期时间。
这是我创建令牌的方式:
var token = jwt.sign({
id: id,
expiresIn: '2m'
},
'mysecretkey'
);
这是我的中间件的外观:
var token = req.headers['authorization']
var idToken = token.split(' ')[1]
if(token) {
jwt.verify(idToken, 'myscretkey', (err, decoded) => {
if(err) {
return res.status(400).send('Session expired')
}
next()
})
}
这是我在decoded
中收到的信息:
dec: {
id: 'an id',
expiresIn: '2m',
iat: 1596744770
}
在这种情况下,即使过了2分钟,我的令牌也没有过期。
我该如何实现?
谢谢
答案 0 :(得分:2)
如果您想使用hours
使用minutes
或expiresIn
,则需要像这样在secret
之后声明它
let token = jwt.sign(id,'mysecretkey',{ expiresIn: '1h'});
详细了解here
答案 1 :(得分:1)
在代码中,您添加了expiresIn
作为有效负载的一部分。但是,expiresIn
毫无意义,您需要使用标准的exp
claim来使其过期:
jwt.sign({
id: 'an id',
exp: Math.floor(Date.now() / 1000) + (60 * 2),
iat: Math.floor(Date.now())
}, 'secret')
在此示例中为2分钟。 您还可以计算: (60 *分钟),(3600 *小时)或(86400 *天)持续数分钟,数小时或数天。
如Shivam Soods答案所示, expiresIn
可以用作符号方法的选项。我认为这就是您感到困惑的原因。