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

时间:2015-04-27 16:53:00

标签: firebase

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

"users": {
    "$uid": {
        "$other": {
            ".validate": "['phone', 'username'].indexOf($other) > -1"
        }
    }
}

由于数组我收到错误:(

那么我想做这样的事情但是如果我有很多潜在的领域那真的不是很好

"$other": {
    ".validate": "$other === 'phone' || $other === 'username'"
}

最后,我在Firebase中创建了一个名为“rules”的节点并执行了此操作:

"rules": {
    "users": {
        "fields": {
            "phone": true,
            "username": true
        }
    }
}

然后我的用户对象中的新验证规则是:

"$other": { 
    ".validate": "root.child('rules/users/fields/'+$other).val() === true"
}

我的问题是:这是限制字段名称的正确方法吗?

非常感谢您的回答:)我对Firebase很新,但我尝试了很多乐趣!

1 个答案:

答案 0 :(得分:9)

要将Firebase中的对象限制为仅具有指定的键,请尝试使用一个与未指定的属性匹配的其他通配符子项,如果包含其中一个不匹配的属性,则拒绝写入:

"rules": {
  "users": {
    "$userid": {
      ".validate": "newData.hasChildren(['phone', 'username'])",
      "phone": {
        ".validate": "newData.isNumber()"
      },
      "username": {
        ".validate": "newData.isString()"
      },
      "$other": {
        ".validate": false
      }
    }
  }
}