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

部署删除用户的Firebase云函数遇预部署错误,寻求解决建议

解决Firebase云函数部署错误及用户双删除实现方案

部署错误原因

你遇到的predeploy error: Command terminated with non-zero exit code 1,大概率是代码缺少完整云函数结构、未覆盖Firestore删除逻辑,或是依赖/配置不规范导致的。你提供的代码仅为删除Auth用户的片段,并非可直接部署的完整云函数。

完整实现代码

以下是同时删除Firebase Authentication用户和Firestore对应用户文档的完整云函数(支持JS/TS两种写法):

TypeScript版本

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

admin.initializeApp();

// 云函数:同步删除Auth与Firestore用户
export const deleteUser = functions.https.onCall(async (data, context) => {
  // 权限校验:仅允许管理员调用(可根据业务需求调整规则)
  if (!context.auth || !context.auth.token.admin) {
    throw new functions.https.HttpsError(
      "permission-denied",
      "无权限执行此操作"
    );
  }

  const uid = data.uid;
  if (!uid) {
    throw new functions.https.HttpsError(
      "invalid-argument",
      "必须传入用户UID"
    );
  }

  try {
    // 1. 删除Firebase Authentication中的用户
    await admin.auth().deleteUser(uid);
    // 2. 删除Firestore中对应用户文档(假设用户集合名为`users`,文档ID与用户UID一致)
    await admin.firestore().collection("users").doc(uid).delete();
    return { success: true, msg: "用户已成功删除" };
  } catch (err) {
    functions.logger.error("删除用户失败:", err);
    throw new functions.https.HttpsError(
      "internal",
      "删除用户时发生错误",
      err
    );
  }
});

JavaScript版本

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

admin.initializeApp();

exports.deleteUser = functions.https.onCall(async (data, context) => {
  if (!context.auth || !context.auth.token.admin) {
    throw new functions.https.HttpsError(
      "permission-denied",
      "无权限执行此操作"
    );
  }

  const uid = data.uid;
  if (!uid) {
    throw new functions.https.HttpsError(
      "invalid-argument",
      "必须传入用户UID"
    );
  }

  try {
    await admin.auth().deleteUser(uid);
    await admin.firestore().collection("users").doc(uid).delete();
    return { success: true, msg: "用户已成功删除" };
  } catch (err) {
    functions.logger.error("删除用户失败:", err);
    throw new functions.https.HttpsError(
      "internal",
      "删除用户时发生错误",
      err
    );
  }
});

部署前必做检查

  • 安装依赖:在云函数目录执行npm install firebase-functions firebase-admin --save
  • 本地调试:使用firebase emulators:start启动本地模拟器,提前排查语法或逻辑错误
  • 配置校验:确认firebase.json中函数入口路径与代码导出的函数名匹配
  • 权限配置:确保云函数服务账号拥有Firebase Auth Admin和Cloud Firestore Editor权限

前端调用示例

点击用户卡片删除按钮时,调用该云函数:

const deleteUser = firebase.functions().httpsCallable('deleteUser');

async function handleDeleteUser(uid) {
  try {
    await deleteUser({ uid });
    // 移除页面上的目标用户卡片
  } catch (error) {
    console.error('删除失败:', error.message);
  }
}

内容的提问来源于stack exchange,提问作者ei-dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:24:08