firebase快照中的唯一用户名是否存在

时间:2017-11-16 12:32:14

标签: ios swift firebase firebase-realtime-database username

do you mean this one 如果用户名存在阻止他的警告消息检查用户名是否存在于firebase中的正确方法

这是我的代码

@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:.......appspot.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()
            })
}
}

1 个答案:

答案 0 :(得分:0)

我不知道您如何构建Firebase实时数据库,但您可以使用DataSnapshot接口中的exists()函数:

  

如果此DataSnapshot包含任何数据,则返回true。它比使用snapshot.val()!== null。

更有效

以下是Firebase文档中的示例:

// Assume we have the following data in the Database:
{
  "name": {
   "first": "Ada",
   "last": "Lovelace"
  }
}

//Test for the existence of certain keys within a DataSnapshot
var ref = firebase.database().ref("users/ada");
ref.once("value").then(function(snapshot) {
 var a = snapshot.exists();  // true
 var b = snapshot.child("name").exists(); // true
 var c = snapshot.child("name/first").exists(); // true
 var d = snapshot.child("name/middle").exists(); // false
});

您可以创建一个存储当前使用的所有用户名的特定节点,并使用此存在方法检查该节点是否存在,您将显示警报并阻止注册过程。如果没有,您可以继续注册过程。

但是在尝试检查之前调用createUser方法。

更新:

  1. 根据您当前的Firebase数据库结构,您需要创建一个名为 Usernames 的节点,例如您要存储所有用户名。
  2. 在调用createUser方法之前,从此Usernames节点获取DataSnapshot以获取已存储的所有用户名。
  3. 最后使用exists()函数检查用户输入的用户名是否已存在。如果存在,请显示您的提醒。如果没有继续您的注册过程。