到目前为止没有Firebase安全规则运气。
我有这个
{
"rules": {
"users": {
"$user_id": {
".read": true,
".write": "auth !== null && auth.uid === $user_id",
"profile": {
".validate": "newData.hasChildren(['first_name', 'last_name'])"
}
}
}
}
}
我发送数据和配置文件,其中一个是空白的...它可以以任何方式写入。我结束了这样的数据...
{
"users" : {
"simplelogin:25" : {
"profile" : {
"first_name" : "John",
"last_name" : ""
}
},
"simplelogin:26" : {
"profile" : {
"first_name" : "Bob",
"last_name" : ""
}
}
}
}
关于如何使上述规则起作用的任何帮助?似乎无法正确验证它。
您的验证规则是:
".validate": "newData.hasChildren(['first_name', 'last_name'])"
因此,如果新数据具有first_name
和last_name
属性,则有效。
您正在发送此对象:
"profile" : {
"first_name" : "John",
"last_name" : ""
}
此对象具有first_name
和last_name
属性,因此根据您的规则有效。
您似乎想要想要 是属性不仅存在,而且是字符串,并且具有最小的长度。如果确实是您的要求,则可以将其写入验证规则:
"profile": {
".validate": "newData.hasChildren(['first_name', 'last_name'])",
"first_name": {
".validate": "newData.isString() && newData.val().length >= 10"
},
"last_name": {
".validate": "newData.isString() && newData.val().length >= 10"
}
}
第一个.validate
确保配置文件具有(至少)first_name
和last_name
属性。其他.validate
规则确保它们具有正确的类型和最小长度。