我看过一些关于在应用程序中注册或注册后将用户信息保存到数据库的教程,但问题是他通过 uid 保存所有用户,而我想要的是通过用户名保存用户你认为是专业的还是更好的方法来做到这一点,或者聊天应用程序无关紧要
@IBAction func SignUp(_ sender: Any) {
if username.text != nil, email.text != nil, password.text != nil, fullname.text != nil {
activityIndicator.startAnimating()
Auth.auth().createUser(withEmail: email.text!, password: password.text!, completion: { (user, error) in
if error != nil {
AlertController.showAlert(self, titel: "Error", message:".Fill all fields\n .User do exists\n .Network error ")
self.activityIndicator.stopAnimating()
return
}
let uid = user?.uid
let storageRef = Storage.storage().reference(forURL: "gs://,,,,,,,,,.com").child("profile_image").child(uid!)
if let profileImg = self.selectedImage, let imageData = UIImageJPEGRepresentation(profileImg, 0.1){
storageRef.putData( imageData, metadata: nil, completion: { (metadata, error) in
if error != nil{
return
}
let profileImageUrl = metadata?.downloadURL()?.absoluteString
let ref = Database.database().reference()
let usersReferance = ref.child("users")
let newUserReferance = usersReferance.child(uid!)
newUserReferance.setValue(["fullname": self.fullname.text, "username": self.username.text, "email": self.email.text, "password": self.password.text, "profileImageUrl": profileImageUrl])
})
}
self.dismiss(animated: true, completion: nil)
self.activityIndicator.stopAnimating()
})
}
}
}
如果您想通过用户名保存用户是的,您可以执行以下操作
@IBAction func SignUp(_ sender: Any) {
if username.text != "", email.text != "", password.text != "", fullname.text != "" {
activityIndicator.startAnimating()
Auth.auth().createUser(withEmail: email.text!, password: password.text!, completion: { (user, error) in
if error != nil {
AlertController.showAlert(self, titel: "Error", message:".Fill all fields\n .User do exists\n .Network error ")
self.activityIndicator.stopAnimating()
return
}
let uid = user?.uid // here you are providing userID
let storageRef = Storage.storage().reference(forURL: "gs://.........com").child("profile_image").child(uid!)
if let profileImg = self.selectedImage, let imageData = UIImageJPEGRepresentation(profileImg, 0.1){
storageRef.putData( imageData, metadata: nil, completion: { (metadata, error) in
if error != nil{
return
}
let profileImageUrl = metadata?.downloadURL()?.absoluteString
let ref = Database.database().reference()
let usersReferance = ref.child("users")
// let newUserReferance = usersReferance.child(uid!) //here in ref you are creating a node with UID
//use your username
let newUserReferance = usersReferance.child(username.text!)
//set child values here as you doing
newUserReferance.setValue(["fullname": self.fullname.text, "username": self.username.text, "email": self.email.text, "password": self.password.text, "profileImageUrl": profileImageUrl])
})
}
self.dismiss(animated: true, completion: nil)
self.activityIndicator.stopAnimating()
})
}
}
对于 2 . 1)我不认为这将是一种更好的方法,就像您使用用户名设置节点一样,如果在注册时其他用户填充相同的用户名数据将被新数据替换
2)如果你使用一些检查用户名是否有效,它会起作用,但只是为了担心需要在数据库中额外的参考来检查用户名是否可用
-- 检查整个数据库是否使用了用户名
-- 或者创建一个包含用户名列表的节点,并获取所有这些用户名并离线检查文本字段验证的快速响应,或者甚至可以放置观察事件
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句