【问题标题】:resource.data null error in the firestore rules simulatorFirestore 规则模拟器中的 resource.data 空错误
【发布时间】:2021-12-16 06:35:28
【问题描述】:

我正在尝试通过“hidingUserId”过滤掉帖子,所以设置的规则是:

match /reviews/{userId=**} {
allow read: if resource.data.hidingUserId == null 
|| resource.data.hidingUserId != userId;
  allow delete, update, create: if request.auth != null;}

但是,在规则模拟器中,“资源”出现空值错误。请看图片

在手机上运行调试会返回“权限缺失或权限不足”。

我的 Firestore 的顺序如下,其中“hidingUserId”是评论数据库中的一个数组。

感谢您的帮助!

【问题讨论】:

    标签: firebase flutter google-cloud-firestore firebase-security


    【解决方案1】:

    为什么你的模拟器会失败。

    resource.data 包含您要获取的文档数据。如果您尝试获取不存在的文档,resource.data == null,您会收到空值错误。

    /reviews/userId我不认为有任何带有id = 'userId'的文档,所以这将尝试获取一个不存在的文档并抛出空值错误。

    如果您在模拟器中使用实际文档,它应该通过 true

    为什么您的调试设备会抛出权限错误

    这是你的规则:

    match /reviews/{userId=**} {
    allow read: if resource.data.hidingUserId == null 
    || resource.data.hidingUserId != userId;
      allow delete, update, create: if request.auth != null;
    }
    

    允许读取如果

    1. resource.data.hidingUserId == null。 hiddenUserId 是一个数组并且不为空。因此这将是错误的。
    2. resource.data.hidingUserId != userId。 userId 是一个字符串,hidingUserId 是一个数组。这应该返回 true。 您的规则应该通过(无意)。 注意:上面的 userId 将包含正斜杠。

    为此,您应该使用@Dharmaraj 建议。

    【讨论】:

      【解决方案2】:

      你有一个递归通配符/reviews/{userId=**},所以userId 的值将是"/userId" 而不仅仅是"userId",它肯定会返回false。此外,hidingUserId 似乎是一个数组,因此相等是行不通的。尝试删除=**,如下所示:

      match /reviews/{userId} {
        allow read: if !(userId in resource.data.hidingUserId);
      
        allow delete, update, create: if request.auth != null;
      }
      

      【讨论】:

      • 谢谢你,@Dharmaraj。但是,我使用了您的建议,但“资源”仍然为空...
      • @HaKim 你能分享评论集合中该文档的屏幕截图吗?您的路径是 /reviews/userId 其中 userId 被视为字符串。它正在寻找以 'userId' 作为文档 ID 的文档。
      • 我尝试了匹配 /reviews/{review},也尝试了 /reviews/{document=**}... 没有任何效果。资源仍然为空。也许,不是所有评论都有数组“hidingUserId”,因为不是所有帖子都会被用户隐藏?
      • @HaKim 保留 match /reviews/{review} 但在规则操场左侧的路径中,将其更改为 /reviews/KeyRpm... 屏幕截图中的文档 ID 而不是 /reviews/userId
      • 是的,我玩过设置 ID,它在模拟器中工作。但是,不在我的手机上。我得到:状态{code=PERMISSION_DENIED,描述=缺少或权限不足。,原因=null}...
      猜你喜欢
      • 2019-09-20
      • 1970-01-01
      • 2023-02-21
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      • 2018-03-17
      • 2020-09-07
      • 1970-01-01
      相关资源
      最近更新 更多