Firebase规则验证数据

时间:2017-07-25 08:51:49

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

我已阅读有关规则以及如何验证数据库中写入的新数据的Firebase文档。有一条线我不明白某件事情。

以下是developers.google.com中的firebase规则代码。

{
  "rules": {
    ".write": true,
    "widget": {rules)
      ".validate": "newData.hasChildren(['color', 'size'])",
      "size": {
        ".validate": "newData.isNumber() &&
                      newData.val() >= 0 &&
                      newData.val() <= 99"
      },
      "color": {
        // the value of "color" must exist as a key in our mythical
        // /valid_colors/ index
        ".validate": "root.child('valid_colors/' + newData.val()).exists()"
      }
    }
  }
}

".validate": "root.child('valid_colors/' + newData.val()).exists()"是我不明白它是什么以及它做什么的。

  • 什么是root.child?它是否用于访问颜色的孩子?
  • 什么是newData.val()).exists()exists()用于什么?

1 个答案:

答案 0 :(得分:2)

当你使用“root”时,它会一直回到顶部。想象一下像这样的数据库:

Database:
 -users
  -uid's
   -username
 -valid colors
  -blue
  -red

当您说root.child("users")时,您会进入包含用户的地图。

当你说root.child("valid colors/blue")时会查看有效颜色的子图。

存在检查数据库中是否存在。 newData代表您要输入的数据。如果要输入“绿色”,则会失败。这是因为如果您的JSON看起来像这样:

"color" : green
newData.val() = green

您的数据库中是否存在?不,不在提供的示例中。这就是失败的原因。颜色为蓝色存在于您的数据库中。当您输入该数据作为新数据时,它将通过规则。