首页 > 解决方案 > Firebase IdToken 过期后如何刷新?

问题描述

我使用 express 作为后端,并且使用 Firebase Admin SDK 将令牌发送回客户端。目前令牌在 1 小时后过期。我在firebase上读到没有任何方法可以更改过期属性,因为它的工作方式 - 用户每小时都会获得一个刷新的令牌。那是对的吗?如果是这样,我应该如何实现它?这是我的登录路线:

exports.login = async (req, res) => {
  const user = {
    email: req.body.email,
    password: req.body.password,
  }
  // Validate Data
  const { valid, errors } = validateLogin(user)
  if (!valid) return res.status(400).json(errors)

  try {
    const data = await firebase
      .auth()
      .signInWithEmailAndPassword(user.email, user.password)
    const token = await data.user.getIdToken()
    const cookieOptions = {
      httpOnly: true,
      secure: false,
    }
    res.cookie('jwt', token, cookieOptions)
    return res.status(201).json({ token })
  } catch (err) {
    errors.general = 'Wrong credentials, please try again'
    return res.status(403).json(errors)
  }
}

标签: reactjsfirebaseexpressfirebase-authentication

解决方案


后端不需要做任何事情来实现令牌刷新。客户端应用程序将使用 Firebase Auth SDK 自动执行此操作。

无论如何,后端应用程序不应该让用户登录 - 这不会按您期望的方式工作。使用 Firebase 身份验证时,客户端应用程序应该使用客户端 SDK 登录。客户端应用程序登录,获取令牌,然后将该令牌传递到后端以使用 Firebase Admin SDK进行验证,然后执行操作。


推荐阅读