Ios 无法通过观察Firebase中的数据库引用获取顶级节点的值
我试图用Swift语言从Firebase数据库(本例中为[branch1,branch2])获取分支列表, 当我观察顶部节点(“分支”)时,它不返回任何内容,甚至第一个print函数也没有被调用,但是如果我观察像branch1这样的分支,它工作得很好。 现在如何检索分支列表([branch1,branch2]) 获取branch1的工作代码是:Ios 无法通过观察Firebase中的数据库引用获取顶级节点的值,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我试图用Swift语言从Firebase数据库(本例中为[branch1,branch2])获取分支列表, 当我观察顶部节点(“分支”)时,它不返回任何内容,甚至第一个print函数也没有被调用,但是如果我观察像branch1这样的分支,它工作得很好。 现在如何检索分支列表([branch1,branch2]) 获取branch1的工作代码是: ref.child("branches").child("branch1").observe(.value, with: { snapshot
ref.child("branches").child("branch1").observe(.value, with: { snapshot in
let address = snapshot.childSnapshot(forPath: "address").value
print("\(address)")
}
它将打印正确的结果(NDG)
安全规则:
{ "rules": {
"Users":{
"$uid":{
".read":"auth.uid == $uid || root.child('Users').child(auth.uid).child('isAdmin').val()==true",
".write":"auth.uid == $uid || root.child('Users').child(auth.uid).child('isAdmin').val()==true"
}
}, "branches":{
"$branchId":{
".read" : "auth.uid == true || root.child('Users').child(auth.uid).child('isAdmin').val()==true || root.child('branches').child($branchId).child('users').child(auth.uid).exists()",
".write" : "auth.uid == true || root.child('Users').child(auth.uid).child('isAdmin').val()==true || root.child('branches').child($branchId).child('users').child(auth.uid).child('isAdmin').val()==true"
}}}}
感谢@vzsg,我发现问题出在权限和规则上。所以我改变了规则,我很容易得到结果
{ "rules": {
"Users":{
"$uid":{
".read":"auth.uid == $uid || root.child('Users').child(auth.uid).child('isAdmin').val()==true",
".write":"auth.uid == $uid || root.child('Users').child(auth.uid).child('isAdmin').val()==true"
}
}, "branches":{
".read": " root.child('Users').child(auth.uid).child('isAdmin').val()==true" ,
".write" : "root.child('Users').child(auth.uid).child('isAdmin').val()==true ",
"$branchId":{
".read": " root.child('branches').child($branchId).child('users').child(auth.uid).exists()",
".write" : "root.child('branches').child($branchId).child('users').child(auth.uid).child('isAdmin').val()==true"
}} }}
你能把代码添加到你的问题中去吗?此外,最好的做法是将firebase结构发布为文本,而不是图像或链接。这样,它就可以搜索,我们在回答问题时不必重新键入,最重要的是,如果图片的主人发生了变化,这就打破了问题。因此,请坚持将其作为文本包含。谢谢@Jay,我会这样做。您可以发布安全规则的相关部分吗?似乎
/branchs
是不可读的,而/branchs/$branchhid
是。@vzsg我已经添加了规则。我已经更改了规则,它工作正常,我想知道为什么它不工作,因为我使用的是管理员帐户,管理员应该可以这样做
{ "rules": {
"Users":{
"$uid":{
".read":"auth.uid == $uid || root.child('Users').child(auth.uid).child('isAdmin').val()==true",
".write":"auth.uid == $uid || root.child('Users').child(auth.uid).child('isAdmin').val()==true"
}
}, "branches":{
"$branchId":{
".read" : "auth.uid == true || root.child('Users').child(auth.uid).child('isAdmin').val()==true || root.child('branches').child($branchId).child('users').child(auth.uid).exists()",
".write" : "auth.uid == true || root.child('Users').child(auth.uid).child('isAdmin').val()==true || root.child('branches').child($branchId).child('users').child(auth.uid).child('isAdmin').val()==true"
}}}}
{ "rules": {
"Users":{
"$uid":{
".read":"auth.uid == $uid || root.child('Users').child(auth.uid).child('isAdmin').val()==true",
".write":"auth.uid == $uid || root.child('Users').child(auth.uid).child('isAdmin').val()==true"
}
}, "branches":{
".read": " root.child('Users').child(auth.uid).child('isAdmin').val()==true" ,
".write" : "root.child('Users').child(auth.uid).child('isAdmin').val()==true ",
"$branchId":{
".read": " root.child('branches').child($branchId).child('users').child(auth.uid).exists()",
".write" : "root.child('branches').child($branchId).child('users').child(auth.uid).child('isAdmin').val()==true"
}} }}