我有一个简单的规则(下面)。它看起来非常简单,并且基于AngularFire种子进行了修改。
我的问题在于$other
。当我将其设置为true时,不允许更新用户路径中的任何字段(使用3向绑定)。当我将validate设置为false时,更新可以正常工作。
我无法弄清楚我做错了什么。所有$other
应该禁止其他字段出现在用户路径中。任何帮助表示赞赏。
{
"rules":
{
".read": false,
".write": false,
"users":
{
"$user":
{
".read": "auth.uid === $user",
".write": "auth.uid === $user && (!newData.exists() || newData.hasChildren())",
"firstName":
{
".validate": "newData.isString() && newData.val().length <= 2000"
},
"lastName":
{
".validate": "newData.isString() && newData.val().length <= 2000"
},
"$other":
{
".validate": false
}
}
}
}
}
答案 0 :(得分:0)
您没有设置“必需”验证规则。例如:
".validate" : "newData.hasChildren(['firstName', 'lastName'])",
这应该在"firstName":
规则之前。
我们的想法是,您首先为所有字段设置一般验证规则,以确保它们是必需的。然后,您为每个字段创建一个验证规则,其中包含其他规则newData.isString()
,newData.val().length <= 2000
,etc
我有类似的问题,这篇博文可以帮助我:https://calendee.com/2014/08/26/firebase-validation-haschildren-pro-tip/