Vérifiez si le nom d'user existe déjà: Swift, Firebase

J'essaie de vérifier si un nom d'user existe ou non. Quand j'appelle queryOrderedBychild , la valeur de snapshot est toujours disponible mais elle imprime toute la database, pas seulement datatables que je request queryOrderby . Lorsque j'appelle queryEqualToValue , il returnne toujours null. J'ai essayé plusieurs façons de le comprendre.

C'est mon code:

 DataService.instance.UsersRef.queryOrdered(byChild:"Nickname").queryEqual(toValue: "kai1004pro").observe(.value, with: { (snapshot) in if (snapshot.value is NSNull) { print("not found") } else { print("found") print(snapshot.value) } }) 

C'est mon tree json:

 Optional({ g50X0FvEsSO4L457v7NzS3dAABl1 = { "User Profile" = { Birthday = "Sep 20, 1992"; Gender = Female; Nickname = kai1004pro; UserUID = g50X0FvEsSO4L457v7NzS3dAABl1; emailAddress = "[email protected]"; isFollow = 0; isFriend = 0; }; }; }) 

Voici les règles de security:

 "rules": { ".read": true, ".write": "auth != null", "Users": { ".read": true, ".write": "auth != null", ".indexOn": ["Nickname", "User Profile"] } } } 

Modifiez votre arborescence JSON pour inclure un noeud distinct active_usernames , en ajoutant le nom d'user de chaque user à chaque fois que vous créez un nouvel user, modifiez-le chaque fois que votre user modifie son nom d'user …

 myApp:{ users:{ uid1:{....}, uid2:{....}, uid3:{....}, uid4:{....}, } active_usernames :{ uid1username : "true", uid2username : "true", uid3username : "true", uid4username : "true" } } 

Pour vérifier votre nom d'user existe déjà: –

 //Checking username existence FIRDatabase.database().reference().child("active_usernames").child(self.enteredUsername.text!).observeSingleEvent(of: .value, with: {(usernameSnap) in if usernameSnap.exists(){ //This username already exists }else{ //Yippee!.. This can be my username } }) 

Changez également vos règles de security pour qu'elles soient lisibles (UNIQUEMENT LISIBLES) à tous, en manipulant les règles de security.

 {rules :{ active_usernames : { ".read" : "true", ".write" : "auth != null" } } } 

PS: – enteredUsername est le textField dans lequel vous entrez votre nom d'user.

Suggestion: – Gardez le code de vérification à l'intérieur de l'événement didChangeEditing de textField (Pour une meilleure expérience user.!)