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

Firestore认证:删除匿名用户后自动重登问题的解决咨询

问题根源

你的onAuthStateChanged监听逻辑里,只要检测到user为null就自动执行signInAnonymously()。当你删除匿名用户后,Auth状态变为null,这个监听会立刻触发,在你完成手机号登录前就创建了新的匿名用户,导致后续出现ID不同的新匿名账号。

解决方案

添加一个状态标记,用来区分「正在处理其他登录方式」的场景,此时暂时禁用自动匿名登录逻辑。

步骤1:添加状态标记

在组件内部新增一个状态,标记当前是否正在处理手机号登录:

const [isProcessingLogin, setIsProcessingLogin] = useState(false);

步骤2:修改Auth状态监听逻辑

更新onAuthStateChanged,只有在没有用户且不在处理其他登录的情况下,才执行自动匿名登录:

function onAuthStateChanged(user: FirebaseAuthTypes.User | null) {
    console.log(
      "Auth State Changed... ",
      user?.uid,
      user?.phoneNumber,
      user?.isAnonymous,
      "<<App.js"
    );
    userCurrentSet(user);
    // 仅当无用户且未在处理其他登录时,自动匿名登录
    if (!user && !isProcessingLogin) {
      auth().signInAnonymously();
    }
    if (initializing && user) {
      setInitializing(false);
    }
  }

步骤3:更新手机号登录逻辑

在confirmCode函数中,开始处理时标记isProcessingLogin为true,整个流程结束(无论成功或失败)后再重置为false:

const confirmCode = async () => {
    initilizingSet(true);
    setIsProcessingLogin(true); // 标记开始处理登录流程
    try {
      if (confirm && confirm.verificationId && userCurrent) {
        // 尝试关联匿名账号与手机号
        await userCurrent.linkWithCredential(
          auth.PhoneAuthProvider.credential(confirm.verificationId, pinNumber)
        );
      }
    } catch (e) {
      console.log(e.code, "<<errCode");
      if (e.code === "auth/credential-already-in-use") {
        try {
          // 删除当前匿名账号
          await userCurrent.delete();
          // 直接用手机号登录
          await confirm.confirm(pinNumber);
        } catch (err) {
          console.log(err);
        }
      }
    } finally {
      initilizingSet(false);
      setIsProcessingLogin(false); // 登录流程结束,恢复自动匿名登录逻辑
    }
  };

逻辑说明

  • 当触发手机号登录时,isProcessingLogin设为true,此时即使删除匿名账号导致Auth状态变为null,onAuthStateChanged也不会触发自动匿名登录。
  • 登录流程完成(成功或失败)后,isProcessingLogin重置为false:如果登录失败且当前无用户,onAuthStateChanged会自动触发匿名登录回到初始状态;如果登录成功,则保持已登录状态。

内容的提问来源于stack exchange,提问作者Wisam Jbori

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:16:30