【问题标题】:Firebase: setting additional user propertiesFirebase:设置其他用户属性
【发布时间】:2016-09-21 19:15:09
【问题描述】:

我想向 Firebase 用户对象添加一个属性。 user documentation 说我只能使用 Firebase 实时数据库存储其他属性。

我不确定这在实践中如何运作

以下在实践中是什么意思?

您不能直接向 Firebase 用户对象添加其他属性; 相反,您可以将其他属性存储在 Firebase 中 实时数据库。

我是这样理解的:

“您无法修改 FIRUser 对象的属性,但您可以将其与其他对象结合使用”

我找到了 set 函数documentation,我用这种方式解释了它:

  var userRef = ref.child("users");
  userRef.set({
    newfield: "value"
  });

这是一个明智的做法吗?

【问题讨论】:

    标签: javascript firebase-realtime-database database-design firebase-authentication


    【解决方案1】:

    你快到了。在旧版 Firebase 文档中,我们有一个关于 storing such additional user data 的部分。

    关键是将附加信息存储在用户的uid下:

        let newUser = [
            "provider": authData.provider,
            "displayName": authData.providerData["displayName"] as? NSString as? String
        ]
        // Create a child path with a key set to the uid underneath the "users" node
        // This creates a URL path like the following:
        //  - https://<YOUR-FIREBASE-APP>.firebaseio.com/users/<uid>
        ref.childByAppendingPath("users")
           .childByAppendingPath(authData.uid).setValue(newUser)
    

    我添加了一条说明,我们也应该在新文档中添加此信息。我们只需要为它找到一个好地方。

    【讨论】:

    • 所以默认情况下“用户”节点不存在,除非这样创建对吗?我同意这应该在新文档中。本来可以为我节省 2 天的困惑。 :)
    • 我也很困惑,我试图实现确切的目标,但是在注册邮政编码时引入一个额外的字段并将其保存在某个地方,但文档让我相信这不是可能吗?
    【解决方案2】:

    根据Custom Claims 文档,

    Firebase Admin SDK 支持在用户帐户上定义自定义属性。 [...] 可以为以下常见情况定义用户角色:

    • 为用户添加一个附加标识符。例如,Firebase 用户可以映射到另一个系统中的不同 UID。

    [...] 自定义声明负载不得超过 1000 字节。

    但是,根据Best Practices,仅针对与身份验证相关的用户数据执行此操作,而不是针对一般个人资料信息:

    自定义声明仅用于提供访问控制。它们并非旨在存储其他数据(例如配置文件和其他自定义数据)。虽然这似乎是一种方便的机制,但强烈建议不要这样做,因为这些声明存储在 ID 令牌中,并且可能会导致性能问题,因为所有经过身份验证的请求始终包含与登录用户对应的 Firebase ID 令牌。

    使用自定义声明来存储数据,仅用于控制用户访问。所有其他数据应通过实时数据库或其他服务器端存储单独存储。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多