You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过OOBCODE获取Firebase的token及UID?

首先可以明确:仅通过OOB码调用applyActionCode无法直接获取到用户的uid和ID token,但可以通过搭配其他Firebase Auth接口实现你的需求:

具体实现逻辑

  1. 调用checkActionCode接口提前获取用户uid
    在执行applyActionCode完成验证前,先调用checkActionCode校验OOB码有效性,该接口返回的结果中会直接携带对应用户的uid、邮箱等核心信息。
  2. 完成邮箱验证后获取ID token
    因为用户当前处于登出状态,没有有效登录态的情况下无法直接生成合法的Firebase ID token,有两种常用实现方案:
  • 常规方案:验证完成后引导用户执行登录操作,登录成功后调用user.getIdToken()即可获取有效token,用于调用你的自定义API。
  • 免二次登录方案:在生成邮箱验证链接时,在自定义跳转路径中附加用户的邮箱等标识,验证完成后通过无密码登录(如邮箱链接登录、短信验证码登录)或其他静默登录方式完成用户登录,再获取token。

修改后的参考代码

if(router.query.oobCode) {
  const oobCode = router.query.oobCode
  let targetUserUid = null

  // 第一步:校验OOB码同时获取用户信息
  firebase.auth().checkActionCode(oobCode)
  .then((actionCodeInfo) => {
    // 成功拿到对应用户的uid
    targetUserUid = actionCodeInfo.data.uid
    // 第二步:执行邮箱验证逻辑
    return firebase.auth().applyActionCode(oobCode)
  })
  .then(() => {
    setValidCode(true)
    setVerifiedCode(true)
    // 此处可插入登录逻辑,完成后获取IDtoken调用自定义API
    /* 登录后拿token的示例代码
    firebase.auth().signInWithEmailAndPassword(userEmail, userPassword)
      .then(userCredential => userCredential.user.getIdToken())
      .then(idToken => {
        // 携带uid和idToken调用你的自定义API
      })
    */
  })
  .catch(error => {
    setError(error.message)
    setValidCode(false)
    setVerifiedCode(true)
  })
}

注意事项

  • OOB码仅有一次有效使用机会,且存在有效期,调用applyActionCode完成验证后该码会立即失效,因此必须在调用applyActionCode前执行checkActionCode获取用户信息。
  • OOB码属于用户敏感凭证,不要传输给不可信的第三方服务,避免账号安全风险。

内容的提问来源于stack exchange,提问作者Prashant Patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:36:03