将自定义属性添加到Firebase身份验证

时间:2016-06-15 03:19:18

标签: database xcode swift firebase firebase-authentication

我已经通过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”不符合键值的错误。这不是正确的代码。我似乎无法找到另一种方式。

4 个答案:

答案 0 :(得分:8)

您无法向Firebase Auth添加自定义属性。已提供默认属性以便于访问用户信息,尤其是在使用提供商(例如Facebook)时。

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

希望这有帮助。

答案 1 :(得分:2)

Firebase Auth用户没有“usersName”属性,因此代码出错。

请查看文档:{​​{3}}以及如何Firebase Auth user info

答案 2 :(得分:2)

在此处查看如何向身份验证信息添加自定义声明: Firebase Auth with custom claims 请记住,它限制为1000个字节

答案 3 :(得分:1)

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

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

Firebase documentation中的快速代码:

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.
});