uid上的Firestore规则由于未知原因无法正常工作

时间:2020-04-14 11:27:21

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

我的文档中有一个“所有者”字段,仅使所有者有权阅读该文档,并且只能编写一个新的文档,其“所有者”字段是用户的uid:

allow read: if request.auth.uid == resource.data.owner; allow create, write : if request.auth.uid == request.resource.data.owner;

创建和更新规则按预期工作!我进行了测试,发现如果新数据中记录的“所有者”字段不是用户的UID,那么它将不起作用!

问题是“读取”部分。我无法读取记录。仅当我更改为allow read: request.auth.uid != null时,我才能阅读。 我在调试中三重检查了记录是否具有与UID完全相同的“所有者”字段。

我有使用Firebase的经验,我不知道这里出了什么问题。

1 个答案:

答案 0 :(得分:1)

由于您指出“ [您无法读取记录 s ””(记录中带有 S ),因此您的问题很可能是由于以下事实如documentation所述,安全规则不是过滤器

一旦保护好数据并开始编写查询,请记住 安全规则不是过滤器。 您不能为所有内容写查询 集合中的文档,并期望Cloud Firestore返回 仅当前客户有权访问的文档

您没有显示用于读取Firestore文档的查询,但让我们假设您的文档在名为collection的集合中。

带有类似查询

query = db.collection("collection")
query.get().then(....);

您要独立于用户ID查询,因此出现了问题。

您需要使用where()方法调整查询,如下所示:

//get the value of uid
query = db.collection("cities").where("owner", "==", uid)
query.get().then(....)
相关问题