ios - 如何将用户名和电子邮件保存到 firebase

标签 ios swift firebase firebase-realtime-database

我看过一些关于在应用程序中注册或注册后将用户信息保存到数据库的教程,但问题是他通过那里的 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()
            })
}
}
}

this is how it shows in firebase

最佳答案

如果你想通过他们的用户名保存用户是你可以做如下

@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) 如果你使用一些检查用户名是否有效,它会起作用,但只是为了关心需要在数据库中添加一个额外的引用来检查用户名是否可用

-- 检查整个数据库是否使用了用户名

-- 或者创建一个包含用户名列表的节点,并将所有这些用户名放入数组中,并离线检查文本字段验证的快速响应,或者甚至可以放置观察事件

关于ios - 如何将用户名和电子邮件保存到 firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47384847/

相关文章:

ios - 发送到实例怪异的无法识别的选择器

objective-c - 将项目从 NSArray 传输到 NSSet for NSManagedObject

ios - 如何解决malloc_error_break?

ios - 使用 Apple Maps 确定用户是否在多边形区域之外

swift 2 : Try/Catch a non-throwing function

ios - 使用 Xib 的参数构建 UIView 的优雅方式

ios - admob横幅广告在游戏场景中大约一分钟后显示广告忽略bannerAd.isHidden xcode 8

javascript - Firebase:获取用户数据对象并带回用户个人资料而不刷新页面?

android - 从本地文件系统加载 google-services.json

ios - 应用中存在多个广告实例