Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase安全规则:验证对象中允许哪些字段_Firebase - Fatal编程技术网

Firebase安全规则:验证对象中允许哪些字段

Firebase安全规则:验证对象中允许哪些字段,firebase,Firebase,我试图阻止不需要的字段添加到我的用户对象中。 -->用户可以有电话和用户名(但不必-->newData.hasChildren(['phone','username'])在这里不起作用)。 我第一次尝试这个: "users": { "$uid": { "$other": { ".validate": "['phone', 'username'].indexOf($other) > -1" } } } 由于数组原因,我

我试图阻止不需要的字段添加到我的用户对象中。 -->用户可以有电话和用户名(但不必-->newData.hasChildren(['phone','username'])在这里不起作用)。 我第一次尝试这个:

"users": {
    "$uid": {
        "$other": {
            ".validate": "['phone', 'username'].indexOf($other) > -1"
        }
    }
}
由于数组原因,我收到一个错误:(

然后我想做一些像这样的事情,但如果我有很多潜在的领域,这真的不是很好

"$other": {
    ".validate": "$other === 'phone' || $other === 'username'"
}
最后,我在Firebase中创建了一个名为“规则”的节点,并执行了以下操作:

"rules": {
    "users": {
        "fields": {
            "phone": true,
            "username": true
        }
    }
}
然后,我的用户对象中的新验证规则是:

"$other": { 
    ".validate": "root.child('rules/users/fields/'+$other).val() === true"
}
我的问题是:这是限制字段名的正确方法吗


非常感谢您的回答:)我对Firebase很陌生,但我在尝试它时很开心

若要将Firebase中的对象限制为仅具有指定的键,请尝试使用一个额外的通配符子对象,该子对象将匹配任何尚未指定的属性,如果它包含以下不匹配的属性之一,则拒绝写入:

"rules": {
  "users": {
    "$userid": {
      ".validate": "newData.hasChildren(['phone', 'username'])",
      "phone": {
        ".validate": "newData.isNumber()"
      },
      "username": {
        ".validate": "newData.isString()"
      },
      "$other": {
        ".validate": false
      }
    }
  }
}
非常感谢,罗布!(对于迟来的回答,我很抱歉,我已经立即阅读了它,但忘记了回答:()这是一个很好的解决方案,是的,但它只是意味着列出了所有潜在的(但不是强制性的)字段。但它实际上是好的:-我总是对它们进行一些基本的验证(如newData.isString())-我已经在其他地方列出了它们:)