【问题标题】:How to add user data upon account creation that can't be edited by the user?如何在创建帐户时添加用户无法编辑的用户数据?
【发布时间】:2017-01-17 10:24:18
【问题描述】:

因此,我希望在创建用户帐户时将一些用户信息存储在 Firebase 实时数据库中,但以后用户不应写入这些信息,而且我似乎不知道该怎么做关于这样做。据我了解,创建帐户时,除了登录特定数据(facebook登录、google登录、电子邮件/密码登录)之外的所有数据都“由用户”存储,因为它只写入用户有权写入的位置.

我希望它在帐户创建时写入其他数据,用户以后无法更改,但似乎首先写入该数据的唯一方法是让用户写入访问它。如何在创建帐户时写入一次用户以后无法写入的数据?

例子:

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

"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 字段(假设它是从他们填写的任何网络表单或类似的东西中给出的)但随后用户不能再次编辑?有没有一种方法可以通过 Firebase 数据库安全规则来完成,还是我必须调用某个具有管理员访问权限并确认数据并进行写入的单独服务器?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 完美!正是我想要的。奇怪的是我很难找到它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多