【发布时间】:2017-12-26 06:59:37
【问题描述】:
我希望我的应用程序的用户有权查看通过实时数据库访问的其他用户的个人资料。我通过
引用 dbref.once('users/'+uid, snapshot => snapshot.child('users/'+uid).val())
我的规则:
{
"rules": {
"users": {
".read": true,
"$uid": {
".write": "$uid === auth.uid"
},
},
}
我不明白为什么我无法访问users/:uid,即使模拟器通过勾选read 并在<firebaseURL>/users 上运行模拟来提供success 消息。
如果我在rules 下设置".read": true",它确实允许我读取数据,但是如果我以后想要实现我不希望未经授权的用户使用的东西,那可能会诱使我。
编辑(解决方案):
问题在于引用 firebase。而不是firebase.database.ref('users'),我通过firebase.database.ref() 引用了root 本身。
该引用导致应用默认的read/write 规则。
【问题讨论】:
-
我不确定您希望代码做什么。但是
snapshot.child('users/'+uid).val()=>snapshot.val()似乎是第一个问题。 -
我正在尝试读取单个用户的详细信息,这就是为什么我使用
snapshot.child('users/'+uid).val()并且它确实有效,但是我设置的rules不允许我读取这些数据通过那个函数。 -
你在 ".read: it should be ".read": true,
-
@Jay 确实是从内存中编写代码并错过了一个引用,很好,尽管这并不能解决为什么即使模拟成功我也无法读取数据的问题:\
-
您能否详细说明此代码的预期内容 ref.once('users/'+uid, snapshot => snapshot.child('users/'+uid).val() )
标签: firebase firebase-realtime-database firebase-security