离开 Parse 并迁移到 Firebase 后,我遇到了一个问题,只能使用电子邮件和密码进行注册,如何让 Firebase 也存储用户名?
试试这个...
FIRAuth.auth()?.createUser(withEmail: emailField.text!, password: passwordField.text!, completion: { (user: FIRUser?, error) in
if error != nil {
print(error)
return
} else {
print("User Created...") }
guard let uid = user?.uid else { return }
// You can set these values to whatever you want, plus add more!
let values = ["email": emailField.text!, "username": usernameField.text!] as [String : Any]
// Then pass your values into another function called 'RegisterUserIntoDatabase'
// which creates the user in your Firebase Database...
self.registerUserIntoDatabase(uid, values: values as [String : AnyObject])
})
private func registerUserIntoDatabase(_ uid: String, values: [String: AnyObject]) {
// Adding User Info
let ref = FIRDatabase.database().reference()
let usersReference = ref.child("users").child(uid)
usersReference.updateChildValues(values, withCompletionBlock: { (err, ref) in
if err != nil {
print(err)
return
}
print("Successfully Added a New User to the Database")
})
}
func handleRegister(email:String, password:String, username:String) {
//Create User
FIRAuth.auth()?.createUser(withEmail: email, password: password, completion: { (user, err) in
if err != nil {
print(err!.localizedDescription)
return
}
//Success! User Created!
if let userID = user?.uid {
//Create User Profile
let databaseRef = FIRDatabase.database().reference()
let usersRef = databaseRef.child("Users").child(userID)
let usernameValue = ["username":username]
usersRef.updateChildValues(usernameValue, withCompletionBlock: { (err, ref) in
if err != nil {
print(err!.localizedDescription)
return
}
//Profile created and updated!
//You can use perform segue or present controller to go to another controller...
})
}
})
}