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