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
相关产品推荐
相关产品推荐

