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