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

Firebase匿名账号关联邮箱密码时onCreate云函数误触发并覆盖Firestore用户文档的问题咨询

Firebase匿名账号关联邮箱密码时onCreate云函数误触发并覆盖Firestore用户文档的问题咨询

大家好,我最近碰到一个Firebase相关的问题,想请教下各位:

我写了一个Cloud Function,用来在用户创建账号时自动在Firestore里生成对应的用户文档,代码如下:

exports.addUser = functions.auth.user().onCreate(async (user) => {
  const {uid, email} = user;
  const userRecord = {
    createdAt: admin.firestore.FieldValue.serverTimestamp(),
    ...(email && {email}),
  };
  try {
    await db.collection("users").doc(uid).set(userRecord);
    return true;
  } catch (error) {
    console.error("Error adding user:", error);
    return null;
  }
});

这个函数在用户匿名登录时工作得很正常,能正确创建Firestore文档。但当我在客户端用下面的代码把刚创建的匿名账号关联邮箱密码(相当于账号升级)时:

val credential = EmailAuthProvider.getCredential(email, password)
currentUser?.linkWithCredential(credential)?.await()

上面那个onCreate云函数居然被触发了!而且直接把Firestore里已有的那个用户文档给覆盖了——这明明是账号升级操作,不是新账号创建啊?

我想问问:

  • 这种触发onCreate函数的情况是Firebase的正常行为吗?
  • 有没有办法避免这种不必要的覆盖?

另外我之前看到有个说法和我遇到的情况完全相反,说匿名用户升级不会触发onCreate函数,这就让我更疑惑了。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 12:14:29