如何验证令牌是否过期

时间:2018-07-19 21:03:30

标签: node.js express oauth async-await sequelize.js

我想验证令牌是否过期,然后发送状态和消息

 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()托盘,但是没有捕获到错误

2 个答案:

答案 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(),这样可以确保一旦过期时间过后,该用户将被主动注销。