Pat*_*kkx 1 javascript firebase firebase-security firebase-realtime-database
我的实际验证如下:
".write": true,
".validate": "newData.child('name').isString()
&& newData.child('surname').isString()
&& newData.child('age').isNumber()",
Run Code Online (Sandbox Code Playgroud)
但是,该age属性是可选的.用户可以填写或不填写,取决于他的决定.
我的情况是,怎么说firebase age是可选的,但如果它在那里(用户填写) - 它必须是一个数字?
类似于maybe typeFlow或TypeScript(age?: number)
谢谢!:)
要使年龄可选,请将其验证规则向下移动到您尝试验证的特定值:
".write": true,
".validate": "newData.child('name').isString() && newData.child('surname').isString()"
"age": {
".validate": "newData.isNumber()"
}
Run Code Online (Sandbox Code Playgroud)
这样做的原因是验证规则仅在数据存在时触发,因此age仅在age属性存在时执行验证,完全按照您的意愿执行.
一般来说,我建议将类型验证向下移动到子节点,并且只保留更高级别的"这些属性必须存在":
".write": true,
".validate": "newData.hasChildren(['name', 'surname'])",
"name": {
".validate": "newData.isString()"
},
"surname": {
".validate": "newData.isString()"
},
"age": {
".validate": "newData.isNumber()"
}
"$other": {
".validate": false
}
Run Code Online (Sandbox Code Playgroud)
上面的最后一个验证确保只允许指定的属性,因此用户无法添加其他数据(您的代码可能无法处理).
| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |