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

如何编写函数同时删除Firestore用户与Storage中存在的文件?

解决方案

你可以修改现有的云函数,加入Firebase Storage的文件删除逻辑,同时处理头像文件不存在的情况,避免因文件不存在导致整个函数执行失败。以下是修改后的完整代码:

const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();

exports.deleteUser = functions.auth.user().onDelete(async (user) => {
  const uid = user.uid;
  // 执行Firestore文档删除
  const firestoreDeletePromise = admin
      .firestore()
      .collection("users")
      .doc(uid)
      .delete();

  // 构建用户头像的Storage文件引用
  const storageRef = admin.storage().bucket().file(`images/${uid}.png`);
  // 删除头像文件,捕获文件不存在的错误
  const storageDeletePromise = storageRef.delete().catch((err) => {
    if (err.code === "ENOENT") {
      functions.logger.info(`头像文件 images/${uid}.png 不存在,跳过删除`);
    } else {
      // 非文件不存在的错误抛出,便于排查
      throw err;
    }
  });

  // 等待两个删除操作完成
  await Promise.all([firestoreDeletePromise, storageDeletePromise]);
  functions.logger.info(`用户 ${uid} 的数据处理完成`);
});

核心要点

  • 使用async/await简化异步代码逻辑,通过Promise.all并行执行两个删除操作,提升执行效率
  • 针对Storage删除操作做了错误处理:
    • 当错误码为ENOENT时(代表文件不存在),仅记录日志跳过,不会影响Firestore文档的删除流程
    • 其他类型的错误会重新抛出,方便在Firebase控制台查看错误日志定位问题
  • 用functions.logger记录操作日志,后续排查问题更便捷

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:35:05