如何在Firestore中保护聊天数据?

时间:2019-07-05 12:45:43

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

我正在尝试保护数据库,并且希望保护消息。 我的结构是messages / {chatid} / chat / messageArray(聊天对象类似于userid1-userid2)。所以我想检查安全规则,如果chatid包含用户ID。我尝试了一些在模拟器中正常工作的方法,但是我遇到了问题,因为在我的代码中我查询了集合组,并且firestore拒绝访问。我做类似db.collection(“ messages”)。where(“ users”,“ array-contains”,user.uid).onSnapshot ..... 如果有人知道我如何保护邮件数据,那我会很棒。

match /messages/{chatId}/{document=**} {
  allow read, write: if chatId.matches('.*'+request.auth.uid+'.*');
}

1 个答案:

答案 0 :(得分:0)

您在此处显示的规则与示例查询不匹配。该规则只能匹配邮件集合中文档子集中的文档。您的查询正在尝试立即阅读邮件集中的文档。全局通配符不能匹配零路径分量。 Only in rules version 2 can a glob wildcard match nothing.

您的选择是在规则的第一行设置rules_version = '2';,或添加另一个与邮件中的文档匹配的规则,而无需使用全局通配符:

match /messages/{chatId} {
  allow read, write: if chatId.matches('.*'+request.auth.uid+'.*');
}

我鼓励您不要尝试匹配chatId的内容,而应该使用文档的字段。您的查询还应该使用这些字段来过滤查询。这更简单。