【问题标题】:WriteFields in Firestore Rules only working in SimulatorFirestore 规则中的 WriteFields 仅适用于模拟器
【发布时间】:2018-07-21 12:18:39
【问题描述】:

我在使用 Firestore 规则时遇到的一个大问题是,使用 Firebase 控制台中的模拟器来模拟数据库访问与我从客户那里看到的行为不符。现在我偶然发现了一个我似乎无法解决的问题。

问题

模拟器中的以下语法工作正常

allow create: if request.writeFields.hasAll(["a", "b", "c"]);

当从我的 Android 客户端使用 完全相同 字段请求时,我得到 Error performing setData, PERMISSION_DENIED: Missing or insufficient permissions.

请求(简化​​)如下所示:

通过设置allow create;(简化),我已验证并确定问题必须与request.writeFields 相关,因为我的请求(仅来自我的真实客户)一旦添加相关逻辑就会失败。
在我的所有测试中允许模拟数据访问

我的参考是List interface

问题

我想知道我是否遗漏了有关 writeFields(可能与 allow create 相关联)的信息,以及我如何经常看到模拟访问和真实访问之间的差异。
请记住,我的语法在模拟器中运行良好,但包含完全相同的 JSON 数据的真实请求会失败。

【问题讨论】:

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


    【解决方案1】:

    您现在可以使用 map diffs 而不是 writeFields 来解决这个问题:

    request.resource.data.diff(resource.data).affectedKeys().hasAll(["a", "b", "c"]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-11
      • 2019-10-15
      • 2018-04-02
      • 2021-12-16
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 2021-07-23
      相关资源
      最近更新 更多