我遇到的问题是,通过下面显示的以下firebase规则,经过身份验证的用户可以成功写入数据库但无法从中读取,因为我得到了“#34;权限被拒绝"在控制台中。当我将读取和写入都设置为true(public)时,读取和写入功能都正常工作。我从数据库中读取的代码也如下所示:
{
"users" : {
"9kV3otdvOXU0ssMZWIdfggrBrj63" : {
"Citrus" : [ "orange", "lime", "mandarin", "lemon" ],
"Fruit" : [ "apple", "banana", "mango" ],
"Meat" : [ "beef", "pork", "lamb", "chicken" ],
"Veg" : [ "tomato", "potato", "cabbage" ]
}
}
}
规则:
W/SyncTree: Listen at / failed: DatabaseError: Permission denied
示例数据库:
_.mapKeys(action.payload.data)
这是确切的错误:
return _.mapKeys(action.payload.data);
答案 0 :(得分:0)
正如Doug已经评论过的那样,如果没有看到您将监听者附加到哪些数据,那么很难提供帮助(因此key1, key2, key100
或DatabaseReference
上的addValueListener
也是如此。但是从听众的这段代码来看,你似乎正在倾听addListenerForSingleValueEvent
。
/
您的所有用户都无权阅读dataSnapshot.child("users")
,因为您只能授予他们访问/
的权限。您的代码现在不仅违反了您的安全规则,如果它有效,它将下载的数据超出了所需的数量。
相反,您应该将侦听器附加到JSON树中的最低级别,该级别包含您需要的所有数据(并具有读取权限)。在你的情况下似乎是/users/$uid
,所以你要做:
/users/$uid