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

Firebase Firestore权限拒绝错误:写入subscribers集合失败求助

问题原因分析

从错误日志和安全规则来看,权限拒绝发生在写入subscribers/{subscriberId}文档时,核心原因有两点:

  • 创建文档时resource.data不存在:当前规则中write操作依赖resource.data.userId、resource.data.phone等字段,但resource指的是已存在的文档,执行创建新文档操作时,resource.data为null,导致所有条件不满足,触发权限拒绝。
  • 规则范围不明确:顶级match下的直接allow规则会应用到所有集合的文档,包括subscribers,但没有针对subscribers集合做针对性权限配置,逻辑混乱。
解决办法

修改Firestore安全规则,明确subscribers集合的权限逻辑,拆分创建(create)和更新(update)操作的校验条件:

service cloud.firestore {
  match /databases/{database}/documents {
    // 管理员读取规则(保留原逻辑)
    match /subscribers/{subscriberId} {
      allow read: if isSignIn() && 
        request.auth.uid == resource.data.userId && 
        resource.data.role == "Admin";
      
      // 订阅者的创建规则
      allow create: if isSignIn() && 
        request.resource.data.userId == request.auth.uid && 
        request.auth.token.phone_number == request.resource.data.phone &&
        request.resource.data.role == "Subscriber";
      
      // 订阅者的更新/删除规则
      allow update, delete: if isSignIn() && 
        request.auth.uid == resource.data.userId && 
        request.auth.token.phone_number == resource.data.phone &&
        resource.data.role == "Subscriber";
    }

    // sites集合规则(保留原逻辑)
    match /sites/{site} {
      allow read, write: if isSignIn();
      match /messages/{message} {
        allow read, write: if isSignIn();
      }  
    }
  } 

  function isSignIn(){
    return request.auth.uid != null;
  }
}

关键修改点说明

  • 明确集合匹配范围:给subscribers集合单独设置match /subscribers/{subscriberId},避免规则影响其他集合。
  • 拆分write操作:将原有的write拆分为create和update/delete:
    • 创建(create)时,使用request.resource.data校验要写入的字段,确保新文档的userId、phone、role与当前用户身份匹配。
    • 更新/删除(update, delete)时,使用resource.data校验已存在文档的字段,保证操作人是文档所属用户。
  • 保留原管理员和sites集合逻辑:确保原有功能不受影响。

额外检查项

  • 确认用户短信验证后,request.auth.token.phone_number已正确关联到用户令牌(Firebase Auth会自动完成该关联)。
  • 确认写入subscribers文档时,传入的userId、phone、role字段值符合规则要求,比如userId必须等于当前用户的uid,phone需带国家区号(如+8613xxxxxxxxx)且与Auth令牌中的格式一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:05:22