【问题标题】:How to refresh Firebase IdToken after it expires?Firebase IdToken 过期后如何刷新?
【发布时间】:2020-09-07 00:43:50
【问题描述】:

我使用 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)
  }
}

【问题讨论】:

    标签: reactjs firebase express firebase-authentication


    【解决方案1】:

    在后端实现令牌刷新无需做任何事情。客户端应用会使用 Firebase Auth SDK 自动执行此操作。

    无论如何,后端应用程序不应该让用户登录 - 这不会按您预期的方式运行。使用 Firebase 身份验证时,客户端应用程序应该是 sign in using the client SDK。客户端应用登录,获取令牌,然后使用 Firebase Admin SDK 将该令牌传递给后端为 verified,然后执行操作。

    【讨论】:

    • 我学习了一门课程,在那里我们以不同的方式实现了登录。电子邮件和密码已发送到服务器,然后我们通过使用 admin SDK 验证电子邮件和密码来生成令牌
    • 嗯,这不是 Firebase 的工作方式。也许其他系统也是这样工作的。登录预计来自客户端,并且令牌传递给服务器。请阅读我提供的文档链接以获取更多信息。
    • 我熟悉文档。但是,Firebase 确实具有允许通过后端进行身份验证的 Admin SDK。我猜他们添加它是有原因的 =)
    • 是的,在这种情况下,它用于验证您从客户端发送的令牌。我的答案中有一个链接。 Admin SDK 不用于登录用户。
    • @DougStevenson 在文档中并不清楚究竟什么会触发令牌被刷新。默认情况下,如果我是正确的,它是一个一小时的令牌。用户登录时可以在客户端 sdk 上强制刷新。之后发现无法刷新令牌,因此用户不必再次输入密码即可保持登录状态。用户登录时是否会自动刷新与应用交互还是我们需要做些什么来避免每次令牌过期时用户都进行身份验证?
    猜你喜欢
    • 2019-11-23
    • 2019-06-01
    • 2019-09-03
    • 2021-04-15
    • 2020-07-18
    • 2021-08-30
    • 2017-10-19
    • 2019-12-10
    • 2019-05-09
    相关资源
    最近更新 更多