繁体   English   中英

根据Firebase中的规则检索数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM