如何检查我的令牌是否过期?
var token = jwt.sign(user,app.get('superSecret'),{
expiresIn : 2
});
我假设您正在使用 此处记录的 jsonwebtoken 包。
如果是这样的话,请查看 jwt.verify
方法:
jwt.verify(token, 'shhhhh', function(err, decoded) {
if (err) {
/*
err = {
name: 'TokenExpiredError',
message: 'jwt expired',
expiredAt: 1408621000
}
*/
}
});
简单来说:检查那个方法的错误。如果是 TokenExpiredError,那么猜猜看……令牌已过期。
var isExpiredToken = false;
var dateNow = new Date();
if(decodedToken.exp < dateNow.getTime()/1000)
{
isExpiredToken = true;
}
exp
是以秒为单位),而顶部答案是错误的。虽然这似乎是一个有效的答案,但你最好建议将其作为对顶部投票答案的编辑(只要你有一个清晰的编辑摘要来解释当前代码为什么是错误的)。目前,这个答案已经进入了低质量帖子队列,可能会被删除。干杯! - Andrew Myersvar isExpiredToken = false;
var dateNow = new Date();
if(decodedToken.exp < dateNow.getTime())
{
isExpiredToken = true;
}
dateNow.getTime()
返回毫秒,而 decodedToken.exp
是以秒为单位的。 - rokvar isExpiredToken = false;
var seconds = 1000;
var d = new Date();
var t= d.getTime();
if (decoded.exp < Math.round(t / seconds)) {
// code...
isExpiredToken = true;
}
你需要添加一个错误实例
const decoded = verify(token, process.env.TOKEN_KEY || '', (err: any, decoded: any) => {
if (err instanceof TokenExpiredError) {
return res.status(401).send({ success: false, message: 'Unauthorized! Access Token was expired!' });
}
if (err instanceof NotBeforeError) {
return res.status(401).send({ success: false, message: 'jwt not active' });
}
if (err instanceof JsonWebTokenError) {
return res.status(401).send({ success: false, message: 'jwt malformed' });
}
});
try {
const token = jwt.sign({ uuid: '123456' }, JWT_SECRET, { expiresIn: '1min' })
return token
} catch (error: unknown) {
if (error instanceof jwt.JsonWebTokenError) {
return error.message
}
}
验证
try {
const token = ''
const decoded = jwt.verify(token, JWT_SECRET)
return decoded
} catch (error: unknown) {
if (error instanceof jwt.JsonWebTokenError) {
return error.message
}
}
在验证函数示例中,您需要设置主机当前时间以比较到期日期:
jwt.verify(token, JWT.SECRET_KEY, {clockTimestamp: new Date().getTime()}, callback)
必须设置clockTimestamp属性以设置主机当前时间。
在“过期时间”中使用键名“iat”...希望它能起作用
将代码放置在您的页面或包装器的父组件中是最佳方式。 您需要删除旧的(过期的)令牌。
let token = localStorage.getItem( 'token' );
jwt.verify( token, 'yourkey', function(err, decoded) {
if ( err ) {
localStorage.removeItem( 'token' );
}
} );