【发布时间】:2018-12-19 21:41:18
【问题描述】:
我已经像这样配置了令牌:
jwt.sign(
{
user: pick(user, ['_id', 'username'])
},
secret,
{
expiresIn: '2m'
}
);
但是当我想检查令牌是否过期时,这段代码不起作用:
function isAuthenticated() {
const token = localStorage.getItem('token');
const refreshToken = localStorage.getItem('refreshToken');
try {
decode(token);
const { exp } = decode(refreshToken);
if (exp < (new Date().getTime() + 1) / 1000) {
return false;
}
} catch (err) {
return false;
}
return true;
}
问题出在这部分:
if (exp < (new Date().getTime() + 1) / 1000) {
return false;
}
new Date().getTime() + 1) / 1000 = 1531335468.113
exp = 1531334595
因为我不知道 JWT 使用什么格式的时间...
我该如何解决这个问题?
【问题讨论】:
-
打印“new Date().getTime() + 1”的输出,请发帖。
-
你是如何解码令牌的?如果您使用的是库,它将自动验证令牌的到期时间(默认情况下)。例如。 jsonwebtoken:github.com/auth0/…
-
@RamonSnir 与库 jsonwebtoken
-
@AndrésMontoya 为什么不使用 jwt.verify 而不是 jwt.decode? jwt.decode 甚至不验证令牌是否正确签名。
-
@RamonSnir 我在浏览器上使用jwt-decode,在服务器上使用jsonwebtoken,isAuthenticated函数来自客户端
标签: javascript node.js express jwt