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

Firebase Auth删除用户后,如何同步删除Firestore对应文档?

修复Firebase Auth删除用户同时删除对应Firestore文档的问题

你的代码里Firestore文档删不掉,核心是异步操作顺序没处理对,还有冗余步骤,具体问题和修复方案如下:

原代码的问题

  • admin.auth().deleteUser(uid)没返回Promise,导致下一个then提前执行,可能Auth用户还没删完就去处理Firestore
  • 没必要先get()文档再删除,直接调用doc(uid).delete()即可,多一步get完全冗余
  • 文档删除的Promise没被等待,response.status(200).send('deleted')会在文档删除完成前就发送,导致操作可能没完成就返回成功
  • 嵌套Promise链可读性差,容易出错,改用async/await更直观

修复后的代码

import * as functions from "firebase-functions";
import * as admin from "firebase-admin";

admin.initializeApp();

export const deleteUser = functions.https.onRequest(async (request, response) => {
  try {
    const { userEmail, collection } = request.body;
    
    // 通过邮箱获取用户UID
    const userRecord = await admin.auth().getUserByEmail(userEmail);
    const uid = userRecord.uid;

    // 删除Auth用户
    await admin.auth().deleteUser(uid);

    // 直接删除Firestore对应文档(无需先查询文档)
    await admin.firestore().collection(collection).doc(uid).delete();

    // 所有操作完成后返回成功
    response.status(200).send('用户及对应文档已删除');
  } catch (error) {
    functions.logger.error('删除失败:', error);
    response.status(500).send(`删除失败: ${(error as Error).message}`);
  }
});

关键修改说明

  • 用async/await处理所有异步操作,确保每一步完成后再执行下一步
  • 移除冗余的get()操作,直接调用delete()更高效
  • 所有异步操作加await,保证Auth用户删除和Firestore文档删除都完成后才返回响应
  • 错误处理增加日志记录,同时返回具体错误信息,方便排查问题

测试时仍用你原来的Postman请求参数即可,只要Firestore中用户文档是以uid作为文档ID,就能正常删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:50:22