gpt4 book ai didi

javascript - firestore规则匹配父数据,仅在模拟器中工作

转载 作者:行者123 更新时间:2023-12-01 00:32:46 25 4
gpt4 key购买 nike

我正在尝试制作一个简单的直接消息部分。我有一个包含一些元信息的文档和一个包含单个消息的子集合。当我尝试获取消息时,规则在模拟器中有效,但在 js 中我每次都会收到:未捕获( promise 中)FirebaseError:缺少或权限不足

mongodb结构:

  • 聊天室
    • 房间ID
      • 元信息(发送者 ID/名称、接收者 ID/名称、时间戳等)
      • 消息
        • 消息 ID
          • 姓名
          • 文本
          • 时间戳

规则:

match /chatRooms/{chatRoom}  {
allow create: if request.auth.uid != null;
allow update, delete: if resource.data.uid == request.auth.uid;

function isChatPartner() {
return parentDoc().receiverId == request.auth.uid || parentDoc().senderId == request.auth.uid;
}

function parentDoc() {
return get(/databases/$(database)/documents/chatRooms/$(chatroom)).data;
}

match /messages/{message} {
allow read: if isChatPartner();
}

}

js 请求:

db.collection("chatRoom").doc(_roomId).collection("messages").get().then(msg => {
console.log(msg);
})

有人知道可能出了什么问题吗?

最佳答案

您的数据库和规则不匹配。在规则中,顶级集合称为“chatRooms”,但在您的代码中,它称为“chatRoom”。集合名称需要完全匹配。

还有一个问题。您的代码试图获取子集合中的所有文档,但规则不允许这样做。这些规则正在检查某些字段的访问权限。这在安全规则中不起作用,因为 rules are not filters (请务必阅读并理解这些文档)。查询必须只请求肯定会通过规则的文档 - 规则不会检查每个文档并排除不匹配的文档。

关于javascript - firestore规则匹配父数据,仅在模拟器中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58368500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com