【问题标题】:Adding Custom Attributes to Firebase Auth向 Firebase 身份验证添加自定义属性
【发布时间】:2016-10-15 23:36:00
【问题描述】:

我浏览了 Firebase 的文档,但似乎找不到将自定义属性添加到 FIRAuth 的方法。我正在从 Parse-Server 迁移一个应用程序,我知道我可以设置用户的用户名、电子邮件和 objectId。不,我看到我可以选择电子邮件、displayName 和 photoURL。我希望能够添加自定义属性,例如用户名。例如,我可以使用:

let user = FIRAuth.auth()?.currentUser
            if let user = user {
                let changeRequest = user.profileChangeRequest()

                changeRequest.displayName = "Jane Q. User"
                changeRequest.photoURL =
                    NSURL(string: "https://example.com/jane-q-user/profile.jpg")
                changeRequest.setValue("Test1Name", forKey: "usersName")
                changeRequest.commitChangesWithCompletion { error in
                    if error != nil {

                        print("\(error!.code): \(error!.localizedDescription)")

                    } else {

                        print("User's Display Name: \(user.displayName!)")
                        print("User's Name: \(user.valueForKey("name"))")

                    }
                }
            }

当我运行代码时,我收到“usersName”不符合键值的错误。这不是正确的代码吗?我似乎找不到其他方法。

【问题讨论】:

  • 这个问题有点老了,答案已经改变了,人们仍然来这里寻求正确的答案,如果你能把其他任何答案都认为是正确的,我会推荐。

标签: database xcode swift firebase firebase-authentication


【解决方案1】:

您无法将自定义属性添加到 Firebase 身份验证。已提供默认属性以方便访问用户信息,尤其是在使用提供商(例如 Facebook)时。

如果您需要存储有关用户的更多信息,请使用 Firebase 实时数据库。我建议有一个“用户”父级,它将容纳所有用户子级。此外,还有一个 userId 键或一个 email 键,以便识别用户并将他们与各自的帐户相关联。

希望这会有所帮助。

【讨论】:

  • 不正确,您可以添加 1000 字节的自定义数据作为对用户信息的声明。请参阅我的答案中链接的视频。
  • 你的答案在哪里?
  • 仅供参考,@VitaliyA 的答案已被删除。 '不完全确定为什么。要么是因为它只是指向 youtube 视频的链接,要么是因为客户无法设置“声明”。它们是 Firebase 的服务器专用 admin API 的一部分。
【解决方案2】:

虽然在大多数情况下您无法向用户添加自定义信息,但在某些情况下您可以。

如果您使用 Admin SDK 创建或修改用户,您可以创建自定义声明。通过访问声明对象的属性,可以在您的客户端中使用这些自定义声明。

来自 Firebase documentation 的 Swift 代码:

user.getIDTokenResult(completion: { (result, error) in
  guard let admin = result?.claims?["admin"] as? NSNumber else {
    // Show regular user UI.
    showRegularUI()
    return
  }
  if admin.boolValue {
    // Show admin UI.
    showAdminUI()
  } else {
    // Show regular user UI.
    showRegularUI()
  }
})

用于添加声明的 Node.js 代码:

// Set admin privilege on the user corresponding to uid.

admin.auth().setCustomUserClaims(uid, {admin: true}).then(() => {
// The new custom claims will propagate to the user's ID token the
// next time a new one is issued.
});

【讨论】:

    猜你喜欢
    • 2020-04-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 2018-07-04
    • 2020-08-24
    • 1970-01-01
    相关资源
    最近更新 更多