【问题标题】: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'})

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


【解决方案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
    });
}

【讨论】:

    猜你喜欢
    • 2022-10-06
    • 1970-01-01
    • 2017-12-07
    • 2021-07-03
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 2015-11-12
    相关资源
    最近更新 更多