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

Firestore规则下文档删除时Listener未触发的问题求助

解决Firestore监听文档删除事件不触发的问题

你的推测完全正确:文档删除后resource.data不存在,原规则无法匹配,导致Listener收不到删除通知。需要修改Firestore规则,加入对删除前文档状态的权限验证,确保原文档参与者能收到删除事件。

修改后的Firestore规则

match /games/{gameDoc=**} {
  allow read, write: if 
    request.auth != null &&
    (
      // 文档存在时,验证当前用户是参与者
      (exists(resource) && (resource.data.playerOne == request.auth.uid || resource.data.playerTwo == request.auth.uid))
      ||
      // 文档被删除时,验证当前用户是原文档的参与者
      (!exists(resource) && (resourceBefore.data.playerOne == request.auth.uid || resourceBefore.data.playerTwo == request.auth.uid))
    );
}

规则说明

  • request.auth != null:确保只有登录用户能访问,拦截未授权请求
  • exists(resource):判断当前文档是否存在,存在时沿用原逻辑验证权限
  • resourceBefore:Firestore提供的内置变量,代表操作前的文档快照,删除操作时会保留删除前的完整文档数据,通过它可以验证用户是否是原文档的参与者

修改后,当文档被删除时,规则会检查用户是否是原文档的playerOne或playerTwo,符合条件就会触发Listener,你的Unity代码里snapshot.ToDictionary() == null的分支就能正常执行删除后的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:55:20