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

Firebase实时数据库数据自动删除问题排查求助

Firebase实时数据库聊天数据自动删除问题

我使用Firebase实时数据库存储聊天数据,但数据会在一段时间后自动消失。已尝试修改数据库规则、创建新Firebase项目等操作,问题仍存在,且无其他人员可访问该数据库。

当前数据库规则

{
    "rules": {
        ".read": false,
        ".write": false
    }
}

发送消息代码

const postMessage = async (receiverUserId, message, user) => {
  const { senderUserId, senderType, receiverType,receiverDetails,senderDetails } =
    await getSenderReceiverDetails(user, receiverUserId);
  const senderMessage = firebase
    .database()
    .ref(
      "chatRoom/messages/" +
        senderType +
        "_" +
        senderUserId +
        "/" +
        receiverType +
        "_" +
        receiverUserId
    );
  const receiverMessage = firebase
    .database()
    .ref(
      "chatRoom/messages/" +
        receiverType +
        "_" +
        receiverUserId +
        "/" +
        senderType +
        "_" +
        senderUserId
    );

  senderMessage.push({
    message: message,
    timestamp: firebase.database.ServerValue.TIMESTAMP,
    source: "SENDER",
  });
  receiverMessage.push({
    message: message,
    timestamp: firebase.database.ServerValue.TIMESTAMP,
    source: "RECEIVER",
  });
  const tokenDoc = await UserToken.findOne({
    where: {
      user_id: receiverUserId,
      status: "active",
      user_type: receiverType,
    },
  });
  if (tokenDoc) {
    const fcmToken = tokenDoc.dataValues.fcm_token;
    if (fcmToken && fcmToken != "") {
      notificationService.sendNotification("New message",senderDetails.name + ": " + message, fcmToken);
    }
  }
};

获取消息代码

const getMessages = async (user, receiverUserId) => {
  const {
    senderUserId,
    senderType,
    receiverType,
    senderDetails,
    receiverDetails,
  } = await getSenderReceiverDetails(user, receiverUserId);
  // console.log("senderUserId: ", senderUserId, " senderType ====> ", senderType, receiverType);
  const chatRoomRef = firebase
    .database()
    .ref(
      "chatRoom/messages/" +
        senderType +
        "_" +
        senderUserId +
        "/" +
        receiverType +
        "_" +
        receiverUserId
    );
  const bookingRef = firebase
    .database()
    .ref(
      "chatRoom/booking/" +
        senderType +
        "_" +
        senderUserId +
        "/" +
        receiverType +
        "_" +
        receiverUserId
    );

  // Use Promise.all to wait for both data requests to complete
  const [chatRoomSnapshot, bookingSnapshot] = await Promise.all([
    chatRoomRef.once("value"),
    bookingRef.once("value"),
  ]);

  let messageObj = [];
  const chatRoomData = chatRoomSnapshot.val();
  if (chatRoomData !== null) {
    messageObj = Object.values(chatRoomData);
  }

  let bookingObj = null;
  const bookingData = bookingSnapshot.val();
  console.log("booinggggggg====>",bookingData);
  if (bookingData !== null) {
    const bookingValues = Object.values(bookingData);
    console.log("hiiiiiiiii===>",bookingValues);
    if (bookingValues.length > 0) {
      bookingObj = bookingValues[bookingValues.length - 1];
    }
  }

  // get the sender's name and profile URL from the `user` object
  const senderName = senderDetails.name;
  const senderProfileUrl = senderDetails.profile_pic;

  const receiverName = receiverDetails.name;
  const receiverProfileUrl = receiverDetails.profile_pic;
  const profileDetails = {
    senderName,
    senderProfileUrl,
    receiverName,
    receiverProfileUrl,
  };

  // console.log("messageObj =========> ", messageObj);
  console.log("bookingObj ========> ", bookingObj);
  return { messageObj, bookingObj, profileDetails };
};

排查方向与解决方案

  1. 检查自动清理机制
    Firebase实时数据库无默认自动删除逻辑,需排查是否配置了Cloud Functions定时触发器或第三方工具的数据过期策略,可前往Firebase控制台「Cloud Functions」页面查看是否存在定时删除数据的函数。

  2. 验证规则生效状态
    当前规则.write: false会拒绝所有写入,但你的代码能成功发送消息,说明实际生效的规则可能不一致。前往「Realtime Database」→「规则」页面确认当前发布的规则是否与提供的一致,排查是否存在规则配置未发布的情况。

  3. 排查代码中的删除逻辑
    检查项目内所有操作数据库的代码,确认是否存在清理旧消息的逻辑(如按timestamp删除过期数据),或在业务流程中调用了remove()、set(null)等删除方法。

  4. 确认存储配额与计费状态
    前往Firebase控制台「计费」页面查看是否存在欠费、超出免费配额等异常状态,虽然配额超限不会自动删除数据,但可能导致服务异常。

  5. 测试手动数据持久化
    在Firebase控制台数据库手动添加一条测试数据,观察一段时间后是否自动删除。若手动数据也消失,问题出在项目配置或外部机制;若手动数据保留,则问题源于代码写入逻辑或关联业务流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:27:10