为什么数据写入没有经过验证?

时间:2016-08-27 22:43:54

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

我的数据库结构如下:

flairs
   |_____User1
   |        |__x: 1
   |        |__y: 1
   |        |__z: 1
   |
   |_____User2
            |__x: 1
            |__y: 1
            |__z: 1

我想验证当用户更新他的x,y和z数据时,每个数据都是一个数字,并且他们都在某个范围内。我写了以下规则:

 "flairs": {
      "$user": {
        ".write": "auth != null",
        ".validate": "newData.hasChildren(['x','y','z']) &&
                      newData.child('x').isNumber() &&
                      newData.child('x').val() > -2 &&
                      newData.child('x').val() < 11 &&
                      newData.child('y').isNumber() &&
                      newData.child('y').val() > -2 &&
                      newData.child('y').val() < 8 &&
                      newData.child('z').isNumber() &&
                      newData.child('z').val() > 0 &&
                      newData.child('z').val() < 4"
      }
    } 

基本上我检查新数据是否有x,y和z子项,并且它们是一定范围内的所有整数。但是,当我尝试在flairs/User1中写入以下数据时,即使用户已通过身份验证,我也会拒绝写入:

{
  "User1": {"x":1,"y":2,"z":1}
}

有谁知道我可能做错了什么?这是我的模拟器的图片: sim

1 个答案:

答案 0 :(得分:2)

您正在写信道/flairs/User1并且您正在撰写:

{
  "User1": {"x":1,"y":2,"z":1}
}

因此最终结果将是/flairs/User1/Users/x等。根据您的规则无效。

你想写:

{"x":1,"y":2,"z":1}