[英]jwt.verify not throwing error for expired tokens
我在 Nodejs 中使用 JWT - 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 分鍾后也不會過期。
我怎樣才能做到這一點?
在您的代碼中,您添加了expiresIn
作為有效負載的一部分。 但是expiresIn
沒有意義,你需要使用標准的exp
聲明來過期:
jwt.sign({
id: 'an id',
exp: Math.floor(Date.now() / 1000) + (60 * 2),
iat: Math.floor(Date.now())
}, 'secret')
在本例中為 2 分鍾。 您還可以計算:(60 * 分鍾)、(3600 * 小時) 或 (86400 * 天) 的分鍾、小時或天數。
expiresIn
可以用作 sign 方法的一個選項,如 Shivam Soods 回答中所示。 我想這就是你困惑的原因。
如果您想使用expiresIn
處理hours
或minutes
,您需要像這樣在您的secret
之后聲明它
let token = jwt.sign(id,'mysecretkey',{ expiresIn: '1h'});
在此處閱讀有關它的更多信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.