如何验证令牌是不是过期
Posted
技术标签:
【中文标题】如何验证令牌是不是过期【英文标题】:How to verify if the token expired如何验证令牌是否过期 【发布时间】:2018-12-28 02:57:54 【问题描述】:我想验证令牌是否过期,然后发送状态和消息
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() 但没有发现错误
【问题讨论】:
这是什么类型的令牌?我认为这个问题需要更多的背景来回答。这个函数是签名一个jwt
,但是你还想验证上面的idToken
?你能提供更多细节吗?
我收到一个谷歌令牌并验证该令牌,然后我从谷歌令牌中提取电子邮件并在我的数据库中查找电子邮件,如果存在我与用户生成一个令牌并返回生成令牌的模型用户。但现在我想做的是:如果 google 令牌已过期,请执行以下操作:res.status(401).json('err': 'Token has expired')
【参考方案1】:
这是对您问题的粗略客户端回答。我记得在您链接到此处的上一篇文章中,您正在研究 Google Web Login,所以我从客户的角度回答了。
我没有和你一样的代码来解决这个问题,但总的来说我是这样做的:
从令牌中提取到期日期。检查当前时间是否晚于或等于令牌的到期时间,然后在您正在使用的身份验证实例上调用 reloadAuthReponse
方法。这将更新您的令牌。事实上,每次计算机从睡眠中唤醒时,我都会这样做。
这个 sn-p 包含来自 moment.js 的辅助函数来比较时间,但总体思路如下:
if(now.isSame(exp) || now.isAfter(exp))
gapi.auth2.getAuthInstance().currentUser.get().reloadAuthResponse().then(function()
// do something with the new token
);
【讨论】:
以上是关于如何验证令牌是不是过期的主要内容,如果未能解决你的问题,请参考以下文章