如何在创建帐户时添加用户无法编辑的用户数据?

时间:2017-01-16 23:14:33

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

因此,我希望在创建用户帐户时将一些用户信息存储在Firebase实时数据库中,但用户以后不应该写这个用户信息,我似乎无法弄清楚应该怎么做这样做。根据我在创建帐户时的理解,除了登录特定数据(Facebook登录,谷歌登录,电子邮件/密码登录)之外的所有数据都是“由用户”存储的,因为它只写入用户有权写入的地方

我想要做的是写一些关于帐户创建的额外数据,用户以后不能更改,但似乎首先编写该数据的唯一方法是让用户写访问它。如何在帐户创建时写入一次用户无法写入的数据?

示例:

假设我正在尝试使用该帐户存储电话号码,我的安全规则如下所示:

"rules":{
  ".read":false,
  ".write":false,
  "users":{
    "$user_id":{
      ".read": true,
      "writeable_data":{ //written to on account creation, can be changed later by user
        ".write": "auth.uid === $user_id",
        "name": {".validate":true}
      },
      "unchanging_data":{ //written to on account creation, shouldn't be later changed
        "phone_number": {".validate":"newData.isNumber() && newData.val().length() == 10"}
      }
    }
  }
}

如何创建以便在创建帐户时写入phone_number字段(假设它是从他们填写的任何Web表单或类似内容中提供的),但用户不能再次编辑?有没有办法可以使用Firebase数据库安全规则来完成,或者我是否必须调用某个具有管理员权限且确认数据并执行写入的单独服务器?

1 个答案:

答案 0 :(得分:0)

是的。如果您检查以确保没有预先存在的数据,则将阻止更新(和删除):

"unchanging_data": {
  "phone_number": {
    ".validate": "!data.exists() && newData.isNumber() && newData.val().length() == 10" }
  }
}