当前位置: 首页 > 知识库问答 >
问题:

FirebaseError:“缺少权限或权限不足。”无服务器应用程序中的子集合查询

宰父子安
2023-03-14

我正在测试从我的无服务器angular应用程序部署的子集合查询。我有一个顶级lvl collection用户(2个子文档),有一个嵌套的collection secret,每个都包含一个文档索引contact_details(用于两个用户)
用于我使用的firestore规则

rules_version = '2';
match /databases/{database}/documents {
   match /user/{path=**}/secret/{secret_id} {
       allow read: if true;
   }
}

在我的AngularFirestore中,我使用AngularFirestore查询子集合秘密,如下所示:

this.firestore.collectionGroup('secret').get().subscribe(
    (sec) => { sec.forEach(el => console.log(el.data())) },
    (error) => { console.error(error) }
);

我期望的行为是从嵌套在两个用户文档中的子集合secret中检索所有文档。我从console.error语句获得的错误输出如下:

FirebaseError: "Missing or insufficient permissions."
FirestoreError index.cjs.js:350
fromRpcStatus index.cjs.js:15441
fromWatchChange index.cjs.js:15954
onMessage index.cjs.js:11877
startStream index.cjs.js:11806
getCloseGuardedDispatcher index.cjs.js:11846
newTail index.cjs.js:1688
invoke zone-evergreen.js:359
run zone-evergreen.js:124
scheduleResolveOrReject zone-evergreen.js:855
invokeTask zone-evergreen.js:391
runTask zone-evergreen.js:168
drainMicroTaskQueue zone-evergreen.js:559
invokeTask zone-evergreen.js:469
invokeTask zone-evergreen.js:1603
globalZoneAwareCallback zone-evergreen.js:1629

在firestore规则模拟器中,我已经成功地尝试查询:

get /user/(placeholder)/secret/contact_details

另外,我使用priveledged服务器(node.js)测试了子集合查询,该服务器的工作状态与预期一致。我想我的安全规则是关闭的,但我不知道到底是什么问题,因为我修改了firestore规则的基础上的文件。我很感激你的帮助!

共有1个答案

仇征
2023-03-14

在进一步尝试之后,我得出结论,子集合查询规则必须首先从路径通配符开始,如下所示:

match /{path=**}/secret/...

禁止像我以前试过的那样把它们嵌套在一条路线上是有缝的:

match /user/{path=**}/secret/...

通过这些修改,我得到了预期的结果。

 类似资料:
  • 使用Quasar和Firebase的Im 我得到FireBaseError:缺少或权限不足。控制台错误 错误 脚本: 每当我把 发生缺少权限的情况 但当我移除绑定时,它没有错误 但我想在字段中获取username:值并将其放在我的导航上 firebase-用户名 但我不能得到它除非我移除 同样,当我移除它时,丢失权限的情况再次发生。 我该怎么办 整个代码:

  • 我有以下规则: 所以基本上,我希望经过身份验证的用户能够读/写和集合。但当我创建一个用户并登录时,我会尝试写: 但我有一个错误: 不知道我做错了什么。任何帮助都将不胜感激——谢谢!

  • 我在自学firestore,我想不出一种方法,只允许用户更新、删除或阅读他们添加的集合。 我使用firebase auth进行用户处理。对于每个集合,我将作为保存在数据库中。 这是我的规矩 当我试图读取/获取数据时,我得到错误。 我正在使用firestore的web api(JavaScript)。这是我用来读取数据的代码。

  • 我的Firestore数据库有一些用户和一些s。如果没有其他人认领,用户可以认领。他们通过在上创建一个文档来声明,该文档有一个名为的字段,该字段是对他们自己的用户文档的引用。 我想我已经在这些安全规则中捕捉到了: 但是,当为所有权删除文档时,我获得了: 我是这样做的: 如果我打开read和write设置为true的文档,就不会出现此异常。 我的规则怎么了?他们用模拟器测试正常。

  • 我编写了一些与默认规则完美配合的代码。代码如下: 但如果我用这些规则 我明白了 我做错了什么?