Firebase:设置其他用户属性

时间:2016-05-24 13:59:46

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

我想将属性添加到Firebase用户对象。 user documentation表示我只能使用Firebase实时数据库存储其他属性。

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

以下内容在实践中意味着什么?

  

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

我将其解释如下:

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

我找到了设置函数documentation,我以这种方式插入:

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

这是一种明智的做法吗?

2 个答案:

答案 0 :(得分:17)

你快到了。在旧版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)

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

答案 1 :(得分:1)

根据Custom Claims文档,

  

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

     
      
  • 在用户上添加其他标识符。例如,Firebase用户可以映射到另一个系统中的其他UID。
  •   
     

[...]自定义声明有效载荷不得超过1000个字节。

但是,根据Best Practices,仅对与身份验证相关的用户数据执行此操作,而不对常规配置文件信息执行此操作:

  

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

     

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