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

启用邮箱枚举保护后,React Native中如何关联匿名用户与邮箱提供商?

如何在React Native(firebase@10.4.0)中将匿名用户关联到邮箱提供商

背景说明

2023年9月15日及之后创建的Google Cloud项目,邮箱枚举保护默认启用,导致原本关联匿名用户与邮箱的方法失效:

无法再使用setAccountInfo REST API将邮箱/密码提供商关联到现有用户账户;也无法在任何平台使用带EmailAuthCredential的linkWithCredential客户端SDK方法。必须改用signUp REST API,传入用户的ID Token、邮箱和密码字段来完成关联。

旧方法(已失效)

const authLinkAccountWithEmailCredential = async (email, password) => {
  try {
    const credential = EmailAuthProvider.credential(email, password);
    linkWithCredential(user, credential).then((userCredential) => {
      const newUser = userCredential.user;
      setUser(newUser);
    });
  } catch (error) {
    console.log("AUTH LINK ACCOUNT WITH EMAIL CREDENTIAL", error);
  }
};

新解决方案:调用signUp REST API

由于firebase@10.4.0的客户端SDK未提供对应封装方法,需直接调用Identity Platform的REST API完成关联,步骤如下:

  • 获取当前匿名用户的ID Token
  • 构造POST请求,传入ID Token、邮箱和密码
  • 处理API响应,更新本地用户状态

React Native代码示例

import { getAuth, getIdToken } from 'firebase/auth';

const linkAnonymousUserWithEmail = async (email, password) => {
  const auth = getAuth();
  const user = auth.currentUser;

  if (!user || user.isAnonymous === false) {
    console.error("当前用户不是匿名用户");
    return;
  }

  try {
    // 获取匿名用户的ID Token
    const idToken = await getIdToken(user);

    // 调用Identity Platform的signUp API
    const response = await fetch('https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=你的Firebase项目API密钥', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        idToken: idToken,
        email: email,
        password: password,
        returnSecureToken: true,
      }),
    });

    const data = await response.json();

    if (!response.ok) {
      throw new Error(data.error?.message || '关联失败');
    }

    // 成功后刷新用户信息
    await user.reload();
    setUser(auth.currentUser);
    console.log("匿名用户关联邮箱成功");
  } catch (error) {
    console.log("AUTH LINK ANONYMOUS USER WITH EMAIL", error);
  }
};

注意:需将代码中的你的Firebase项目API密钥替换为实际的Firebase项目Web API密钥,可在Firebase控制台「项目设置」>「常规」页面获取。

内容的提问来源于stack exchange,提问作者David Henry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:54:59