Firebase uid上的Firestore规则不';不知为什么我不能工作

Firebase uid上的Firestore规则不';不知为什么我不能工作,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我的文档中有一个“所有者”字段,只有所有者有权阅读文档,并且只有其“所有者”字段是用户uid的新文档才能写入: 允许读取:if request.auth.uid==resource.data.owner; 允许创建、写入:if request.auth.uid==request.resource.data.owner 创建和更新规则按预期工作!我测试并发现,如果新数据中记录的“所有者”字段不是用户的UID,那么它就不能工作 问题在于“阅读”部分。我无法阅读记录。仅当我更改为allow read

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

允许读取:if request.auth.uid==resource.data.owner;
允许创建、写入:if request.auth.uid==request.resource.data.owner

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


问题在于“阅读”部分。我无法阅读记录。仅当我更改为
allow read:request.auth.uid!=空
,我能够阅读。 我三次检查记录是否有一个与UID完全相同的“所有者”字段,也在调试中

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

因为您指出“[您]无法读取记录s”(在记录中使用s),您的问题很可能来自安全规则不是过滤器这一事实,如下所述:

一旦您保护了数据并开始编写查询,请记住 安全规则不是过滤器您不能为所有用户编写查询 集合中的文档,并期望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(....)

“我无法读取记录。”->你能展示一下你用来读取文件的代码吗?很好的观察。。。那是我错误的假设。我取消了客户端的筛选以进行测试,并假设规则将筛选结果!抢手货