如何使用 Firebase 安全规则验证此数据结构?

How to validate this data structure with Firebase security rules?

到目前为止,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_namelast_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_namelast_name 属性。其他 .validate 规则确保它们具有正确的类型和最小长度。