【问题标题】:Only allow specific children Firebase Rules仅允许特定的子 Firebase 规则
【发布时间】:2017-04-26 05:31:31
【问题描述】:

在我的"allUsers" 节点下,我试图只允许新数据条目具有以下结构:

"allUsers" {
   "$user1: {
     "name": "user1Name"
     "uid": "12345"
   }
}

我不想要除"name""uid" 之外的任何其他值。我在每个$user 下添加了"other": { ".validate": false } 规则,但由于某种原因,以下写入被拒绝:

任何人都可以帮助我理解为什么写入失败,即使我在数据中只有一个名称和 uid?

【问题讨论】:

  • 可能是因为您通过放置".validate": false 来否认$other 中的所有内容
  • 正如@CraftedGaming 所说,您需要通过所有路径和子路径验证。
  • 我发布了一个解决方案,您也不应该在写入规则中检查hasChildren(),因为它们是级联的。如果您需要我详细说明,请告诉我,我心情很好????。

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


【解决方案1】:

您的屏幕截图中的第 15 行已通过。它在$user 下检查newData.child($user)。所以,看起来写的是:/allUsers/meow/meow/(注意用户名重复),这可能是问题的根源。

这或许可以解释为什么 nameuid 的第 18 行和第 19 行既没有通过也没有失败,以及为什么第 20 行失败,因为 "meow" 不是 $user 下面的有效键,即使它是一个有效的用户名。

【讨论】:

    【解决方案2】:

    您需要通过所有路径和子路径的验证。变量$other 正在捕获所有内容,包括您打算允许的路径。而是这样写你的规则。

    "$path": {
      ".validate": "$path == 'name' || $path == 'uid'"
    },
    

    【讨论】:

      猜你喜欢
      • 2018-04-24
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      相关资源
      最近更新 更多