[英]Retrieving data based on rule in Firebase
我正在尝试根据登录用户从Firebase中的实时数据库检索数据。
我在Firebase中的节点如下所示: https ://prnt.sc/kpdoq9,我的规则设置如下:
{
"rules": {
"userhours": {
"$uid": {
".read": "auth != null && auth.uid == $uid",
".write": "auth != null && auth.uid == $uid"
}
}
}
}
当我尝试通过我的方法检索数据时:
loadUserHours() {
firebase
.database()
.ref("userhours")
.once("value")
.then((data) => {
const obj = data.val();
console.log(obj)
})
},
我收到一个Error: permission_denied at /userhours
我认为这与规则有关
".read": "auth != null && auth.uid == $uid",
".write": "auth != null && auth.uid == $uid"
因为“主内部节点”不是实际的uid(已登录用户ID),而是由Firebase生成的随机密钥? 我的结构应该是什么样?
我假设规则是在将userhours/{uidhere}/..
节点设置为userhours/{uidhere}/..
时,规则在userhours/{uidhere}/..
路径中userhours/{uidhere}/..
uid userhours/{randomKeyGeneratedByFirebase}/..
Firebase数据库安全规则不会为您过滤数据。 相反,它仅在附加数据时检查是否允许侦听器访问数据。
当用户将侦听器附加到/userhours
,Firebase数据库服务器将检查他们是否对该节点具有读取权限。 由于您仅授予/userhours/$uid
读取权限,因此没有人具有/userhours
读取权限,并且读取被拒绝。
您将需要将侦听器附加到/userhours/$uid
。 所以:
firebase
.database()
.ref("userhours")
.child(firebase.auth().currentUser.uid)
.once("value")
.then((data) => {
const obj = data.val();
console.log(obj)
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.