Firebase:设置其他用户属性

mm2*_*m24 20 database-design firebase firebase-authentication firebase-realtime-database

我想向Firebase用户对象添加属性.该用户文档说我可以用火力地堡实时数据库只存储附加属性.

我不确定在实践中如何发挥作用.

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

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

我把它解释如下:

"你不能修改FIRUser对象的属性,但你可以将它与其他对象结合起来"

我发现了以这种方式插入的set函数文档:

  var userRef = ref.child("users");
  userRef.set({
    newfield: "value"
  });
Run Code Online (Sandbox Code Playgroud)

这是一种明智的做法吗?

Fra*_*len 17

你快到了.在旧版Firebase文档中,我们有一个关于存储此类其他用户数据的部分.

关键是在用户的下方存储附加信息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)
Run Code Online (Sandbox Code Playgroud)

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

  • 所以"用户"节点默认不存在,除非这样创建正确吗?我同意这应该在新的文档中.本来可以为我节省2天的困惑.:) (7认同)

Dan*_*scu 5

根据海关索赔文件,

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

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

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

但是,根据最佳实践,仅对与身份验证相关的用户数据执行此操作,而不是对一般配置文件信息执行此操作:

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

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