Firebase验证 - 可选属性

时间:2018-01-14 16:37:45

标签: javascript firebase firebase-realtime-database firebase-security

我的实际验证如下:

  ".write": true,  
   ".validate": "newData.child('name').isString() 
     && newData.child('surname').isString() 
     && newData.child('age').isNumber()",

但是,age属性可选。用户可以填写或不填写,取决于他的决定。

我的情况是,如何对age 可选的firebase说,但如果它在那里(用户填写) - 它必须是数字

像Flow或TypeScript中的maybe typeage?: number

感谢:!)

1 个答案:

答案 0 :(得分:5)

要使年龄可选,请将其验证规则向下移动到您尝试验证的特定值:

".write": true,  
".validate": "newData.child('name').isString()  && newData.child('surname').isString()"
"age": {
  ".validate": "newData.isNumber()"
}

这样做的原因是验证规则仅在数据存在时触发,因此age上的验证仅在age属性存在时执行,完全符合您的要求。

一般情况下,我建议将类型验证向下移动到子节点,并且只保留更高级别的“这些属性必须存在”:

".write": true,  
".validate": "newData.hasChildren(['name', 'surname'])",
"name": { 
  ".validate": "newData.isString()" 
},
"surname": { 
  ".validate": "newData.isString()" 
},
"age": {
  ".validate": "newData.isNumber()"
}
"$other": {
  ".validate": false
}

上述最后一次验证确保只允许 指定的属性,因此用户无法添加其他数据(您的代码可能无法处理)。