创建后无法立即从 Firestore 获取()数据

pop*_*rap 5 firebase google-cloud-firestore

TL;DR - 我正在将数据写入我的Firestore后端,然后尝试立即获取该数据。这适用于某些尝试,但在其他尝试中失败,并且似乎在写入数据和可用于exists()安全方法之间存在一些滞后。

长版

这是一个很大的问题,但经过几天的沮丧之后,我设法将我的问题浓缩为一个 JSBin 示例。如果您能抽出几分钟时间来设置Firestore实例并为我进行测试,如果有人可以帮助解决此问题,我会很高兴。

SETUP(对不起,没有太多)

如果你做到了这一点,我假设你有一个 Firebase 帐户并且可以轻松地执行以下操作...

  • 使用Firestore数据库设置Firebase项目
  • 身份验证 > 登录方法部分,启用电子邮件/密码

完成后,在Database > Rules部分添加以下规则:

service cloud.firestore {
 match /databases/{database}/documents {
  match /appUsers/{user} {
   allow read, write: if user == request.auth.uid;
   match /{children=**} {
    allow read, write: if user == request.auth.uid;
   }
  }

  match /groups/{group}{
   allow create: if request.auth != null;
   allow read, write:if exists(/databases/$(database)/documents/groups/$(group)/linkedUsers/$(request.auth.uid));

   match /{children=**}{
    allow create: if request.auth != null;
    allow read, write:if exists(/databases/$(database)/documents/groups/$(group)/linkedUsers/$(request.auth.uid));
   }
  }

  match /currencies/{currency}{
   allow read: if request.auth != null;
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

完成此操作后,获取您的配置片段并将其粘贴到我下面的 JSBin 构建中 - 您将在 JS 文件的顶部看到配置对象。立即运行并使用电子邮件和密码登录 - 您将看到该用户出现在您的新数据库中。

JSBin 示例构建

问题

在第一个输入字段中输入名称,然后单击添加组。这会在您的数据库中创建一个组并将其链接到用户,反之亦然。如果请求数据的用户的 ID 位于请求组的linkedUsers子集合中,则您在上面添加的安全规则应该允许访问组(检查数据库中的结构以查看此链接是否适用于您创建的每个组)。
创建组后,我尝试检索新组数据,但这仅在 60% 的时间内有效。其余时间它会因Missing or insufficient permissions错误而失败。尝试创建几个组,其中一些会立即被成功查询,而另一些则会失败。
正在创建所有数据 - 您可以查看数据库并查看它以及我有时可以得到它向我表明有一些果效的事情发生,基本上我只想了解那是什么以及我如何解决它。我确信它与安全规则中的 exists() 方法相关联,但我真的无法理解它。

任何建议,任何建议,任何技巧,都非常感谢!

干杯