我想验证令牌是否过期,然后发送状态和消息
async function verify () {
const ticket = await client.verifyIdToken({
idToken: req.body.token,
audience: CLIENT_ID
})
const payload = ticket.getPayload()
let email = payload['email']
return User
.findOne({
where: { email: email }
})
.then(user => {
if (!user) {
return next(boom.notFound('User not found'))
}
let token = jwt.sign({user}, config.secret, {
expiresIn: 86400 // expires in 24 hours
})
user.token = token
return res.status(200).send(user)
})
}
verify().catch(console.error)}
我一直在使用client.isTokenExpiring()托盘,但是没有捕获到错误
答案 0 :(得分:1)
这是客户端对您问题的粗略回答。我记得在您以前链接到此处的上一篇文章中,您正在使用Google Web登录,所以我从客户角度回答了问题。
对于这个问题,我没有与您相同的代码,但是总的来说,这就是我所做的:
从令牌中提取到期日期。检查当前时间是否晚于令牌上的到期时间,然后在您正在使用的auth实例上调用reloadAuthReponse
方法。这将更新您的令牌。实际上,每次计算机从睡眠状态唤醒时,我都会这样做。
此代码段包含来自moment.js的帮助程序功能,用于比较时间,但总体思路如下:
if(now.isSame(exp) || now.isAfter(exp)) {
gapi.auth2.getAuthInstance().currentUser.get().reloadAuthResponse().then(function() {
// do something with the new token
});
}
答案 1 :(得分:0)
一旦您有到期时间,就可以使用setTimeout()
运行异步回调,然后在该时间之后将用户注销。例如,假设到期时间为3000毫秒:
const checkTimeout = ()=>{ setTimeout(user.logout(),3000)}
然后,当您为最近登录的用户分配令牌时,也要运行check Time out()
,这样可以确保一旦过期时间过后,该用户将被主动注销。