【发布时间】:2017-09-01 19:25:22
【问题描述】:
我正在研究 AngularJS 和 Firebase,我正在玩一个简单的 ChatApp,只是为了理解代码。
我的 Firebase DB 结构是这样的:
"chat": {
"messages": {
"chat1": { [ list of messages ] },
"chat2": { [ list of messages ] }
},
"rooms": {
"chat1": {
"users": {
"user1": true,
"user2": true
}
},
"chat2": {
"users": {
"user2": true,
"user3": true
}
}
}
}
由于 Firebase 保护规则,我无法在用户节点中添加聊天链接,因此我必须在应用启动时使用 orderByChild() 查询为用户检索聊天室。
使用 Firebase 比我可以使用以下方法检索所有聊天内容要简单:
var chatLink = firebase.database().ref('chat/rooms');
chatLink
.orderByChild('users/' + userId)
.equalTo(true)
.once('value', function(chatSnap){
/* Do Some Stuff Here */
});
一切正常,但我在控制台中收到警告:
FIREBASE 警告:使用未指定的索引。考虑将 /chat/rooms 中的 ".indexOn": "users/{userId}" 添加到您的安全规则中以获得更好的性能
在网上搜索,我发现对于变量 orderByChild() 查询,我可以在我的 Firebase 规则中使用 .indexOn: .value。
我已尝试添加此规则:
{
"rules": {
"chat": {
"rooms": {
".indexOn": ".value"
}
}
}
}
但我仍然经常收到该警告。我该如何解决?
非常感谢!
【问题讨论】:
-
您说您“必须添加此规则”:
{ "rules": { "chat": { "rooms": { ".indexOn": ".value" } } } }但是您在哪里以及如何添加它?
标签: javascript angularjs firebase firebase-realtime-database firebase-security