【问题标题】:Firebase database rules. Unable to write dataFirebase 数据库规则。无法写入数据
【发布时间】:2018-09-07 12:18:34
【问题描述】:

我是 Firebase 规则的新手。而且我无法将数据写入当前登录的用户节点。 我的数据库结构是,

userdata: {
  profile: {
    Lp6Sj763bVUXlisPJyaLM3gbns73: {
      name: "sample"
      avatar: "sample.png",
      userid: "albdchalwe"
    },
    FRw6J6GWK6YbvhuaaHNzPtLRSHJ2: {
      name: "sample"
      avatar: "sample.png",
      userid: "calisdnca"
    }
  },
  additionaldata: {
    Lp6Sj763bVUXlisPJyaLM3gbns73: {
      notifications: {
        0: {
          notificationId: "cbawln"
          receviedon: 12212
        },
        1: {
          notificationId: "cbawln"
          receviedon: 12212
        }
      }
    },
    FRw6J6GWK6YbvhuaaHNzPtLRSHJ2: {
      notifications: {
        0: {
          notificationId: "cbawln"
          receviedon: 12212
        },
        1: {
          notificationId: "cbawln"
          receviedon: 12212
        }
      }
    }
  }

并且想要授予与当前登录用户相关的节点的写入权限。我的数据库规则是,

{
  rules: {
    userdata: {
     profile: {
       .read: "auth != null",
       .indexOn: ["name"]
       $userId: {
         avatar: {
           .write: "$userId == auth.uid"
         },
         avatar: {
           .write: "$userId == auth.uid"
         }
         userid: {
           .write: "$userId == auth.uid && !data.exists()"
         }
       }
     }
   }
 }

配置文件下的用户节点包含更多节点。我刚刚从用户节点添加了 3 个子节点来了解结构。暂时离开附加数据节点。

我的问题是无法将数据写入配置文件节点。当我在模拟器上运行它时,我得到以下信息,

[

谁能帮我解决这个问题。提前致谢。

【问题讨论】:

  • 当您将 UID 设置为 myuid 时,您能否检查是否可以仅将字符串值 sample.png 写入路径 /userdata/profile/myuid
  • 抱歉@FrankvanPuffelen 迟到了,不,我不能。
  • 嗯...这听起来出乎你的意料。您可以更新您的问题以显示屏幕截图吗?
  • 我认为@Tony 编辑的答案是正确的。但我在用户节点下有大约 20 个子节点。那么如何保存每个键,如db.object('userdata/profile/'+userId+'/avatar').set('sample.png')。目前我的实现是db.object('userdata/profile/'+userId).set({avatar:'sample.png', email:'sampl@sample.com'}),这只是一个例子,有很多键。我无法为每个条目定义确切的路径。

标签: javascript firebase firebase-realtime-database firebase-security


【解决方案1】:

是因为你写的是/userdata/profile/$uid而不是/userdata/profile/$uid/avatar定义.write的地方吗? (在您的示例中也有重复)

【讨论】:

  • 我已经尝试了所有这些,$uid, $user_id, $userId。没用。
  • 根据 firebase 文档,较浅的安全规则会覆盖较深路径的规则。见这里,firebase.google.com/docs/database/security/securing-data.write 也一样。如果我将它添加到顶级节点,它适用于子节点。
  • 再次编辑@HarinKommuri
猜你喜欢
  • 2018-07-22
  • 1970-01-01
  • 2019-10-11
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
相关资源
最近更新 更多