$ other规则导致db的3向绑定更新失败

时间:2015-11-30 18:19:59

标签: firebase angularfire

我有一个简单的规则(下面)。它看起来非常简单,并且基于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
        }            
    }  
  }
 }
}

1 个答案:

答案 0 :(得分:0)

您没有设置“必需”验证规则。例如:

".validate" : "newData.hasChildren(['firstName', 'lastName'])",

这应该在"firstName":规则之前。

我们的想法是,您首先为所有字段设置一般验证规则,以确保它们是必需的。然后,您为每个字段创建一个验证规则,其中包含其他规则newData.isString()newData.val().length <= 2000etc

我有类似的问题,这篇博文可以帮助我:https://calendee.com/2014/08/26/firebase-validation-haschildren-pro-tip/