2017-10-18 1 views
0

Je travaille actuellement sur la validation ou l'unicité du nom d'utilisateur dans mon projet Vue.js avec Firebase.La validation du nom d'utilisateur et du mot de passe renvoie toujours vrai (avec Firebase)

Mon approche est la suivante. D'abord, je vais stocker tous les utilisateurs enregistrés/sauvegardés dans un tableau sous le crochet created en utilisant la vue-ressource:

//RETRIEVE REGISTERED TAILORS 
 
    this.$http.get('https://nots-76611.firebaseio.com/tailors.json').then(function(data){ 
 
     return data.json(); 
 
    }).then(function(data){ 
 
     var usersArray = []; 
 
     for (let key in data){ 
 
      data[key].id = key; 
 
      usersArray.push(data[key]); 
 
     } 
 
     this.regTailors = usersArray; 
 
    });

le tableau contiendra deux utilisateurs avec le nom d'utilisateur dyalibidyalibi et marantzmarantz, et mot de passe dyalibidyalibi et marantzmarantz consécutivement (les noms d'utilisateur et les mots de passe sont les mêmes).

Ensuite, sous les propriétés computed, je parcourt le tableau et vérifie si AUCUN mot de passe ou nom d'utilisateur ne correspond à l'un des utilisateurs du tableau. Si tel est le cas, alors il est unique et retournera true ailleurs, il est unique et retournera false:

isUnique: function(){ 
 
     for (var i = 0; i < this.regTailors.length; i++) { 
 
     if((this.tailor.tUsername!=this.regTailors[i].tUsername) && (this.tailor.tPassword!=this.regTailors[i].tPassword)) 
 
     return true; 
 
     else 
 
     return false; 
 
     } 
 
    }

lorsque je tente d'entrer sonny et sonny pour les nom d'utilisateur et le mot de passe, la console affiche true qui est la sortie attendue. alors j'ai essayé marantzmarantz et sonny (et vice versa) il montre false, qui est prévu encore. Mais quand j'essayé d'entrer dyalibidyalibi et sonny (et vice versa), il montre true qui ne devrait pas être le cas puisque l'un des utilisateurs enregistrés a déjà le nom d'utilisateur ou mot de passe dyalibidyalibi!

Y at-il un problème avec ma boucle? ou mon expression booléenne? Comment puis-je résoudre ce problème pour que les utilisateurs qui s'inscrivent aient toujours le nom d'utilisateur et le mot de passe uniques avant de l'enregistrer dans la base de données?

EDIT: J'ai mis quelques console.log() dans la boucle for et il semble que le compteur i est bloqué à 0 et il n'a jamais atteint 1. J'ai vérifié la longueur du tableau et il affiche toujours 2 Je pense donc il n'y a pas de problème sur la longueur. Quel semble être le problème que je manque? il a été deux jours et je ne peux pas le comprendre

+0

Il me semble que vous retournez vrai quand rien * ne * correspondance. N'est-ce pas le contraire de ce que vous cherchez? – theGleep

+0

@theGleep oui, c'est ce que je vise. être «vrai» signifie que le nom d'utilisateur et le mot de passe sont uniques – Kaddy03

+0

Donc, vous voulez vous assurer que ...? aucun nom d'utilisateur ne correspond à un mot de passe? Ou que deux noms d'utilisateur ne correspondent pas? Ou que le nom d'utilisateur n'est pas déjà dans la base de données? – theGleep

Répondre

0

J'ai envoyé mon extrait de code de boucle for à mon ami et il m'a dit au concept de court circuit dans une boucle où la boucle s'arrête à cause du return (crédits pour @ Ricardo Orellana pour le signaler aussi) donc j'ai pensé qu'au lieu de retourner un booléen, je vais l'assigner à une variable déclarée et return ensuite. Je vais parcourir le tableau pour trouver une correspondance entre le nom d'utilisateur et le mot de passe. Si cela correspond, j'affecterai false à une variable et break à la boucle. Si ce n'est pas le cas, affectez true et bouclez jusqu'à la fin.

isUnique: function(){ 
 
     let result; 
 
     for (var i = 0; i < this.regTailors.length; i++) { 
 
     if((this.tailor.tUsername!=this.regTailors[i].tUsername) && (this.tailor.tPassword!=this.regTailors[i].tPassword)) 
 
     result = true; 
 
     else{ 
 
     result = false; 
 
     break; 
 
     } 
 
     } 
 
     return result; 
 
    }

1

Je vous conseille d'essayer une solution en utilisant la fonction intégrée find, dans ce cas, vous voulez comparer une valeur par rapport à un tableau en utilisant une boucle for et retour une valeur booléenne dès que l'évaluation est satisfaite, mais cette évaluation va s'arrêter dès que vos conditions seront satisfaites, pourquoi? car une clause de boucle for est arrêtée avec la clé return, elle est similaire à lorsque vous renvoyez une valeur dans la fonction (elle arrête l'exécution de la fonction).

Donc, essayez quelque chose comme ceci:

isUnique() { 
    var hasTheSameValue = ['dyalibidyalibi', 'marantzmarantz'].find(function (elemOfArrayToEvaluate) { 
    return elemOfArrayToEvaluate === 'Your current username or pass value'; 
    }) 

    if (hasTheSameValue) { 
    // has the same value so it's not unique 
    return false 
    } else { 
    return true 
    } 

} 

Vous pouvez trouver plus d'informations sur find fonction here

+0

J'ai de la difficulté à comprendre le concept de 'trouver()' donc je suis désolé de ne pas pouvoir m'étendre sur ce point trop longtemps parce que ma soutenance de thèse sera dans deux jours et j'ai beaucoup de modules à mettre en place. Je vais essayer de l'étudier à l'avenir. MAIS merci d'avoir signalé l'idée de la rupture de la boucle à cause du retour. Cela m'a beaucoup aidé à résoudre mon propre problème. – Kaddy03

+1

Je suis heureux de vous aider, et votre solution en utilisant une boucle est également valide. – ricardoorellana