Nœud de bcrypt comparer renvoie toujours false
Je suis perplexe, essayant d'obtenir mes mots de passe pour réussir à comparer avec bcrypt l'aide d'un noeud. Peut-être que j'ai raté quelque chose, mais sur la création de compte, j'ai effectuer les opérations suivantes dans l'inscription de la méthode (avec un peu de code abrégé):
bcrypt.genSalt(10, function(err, salt) {
if(err) {
}
bcrypt.hash(user.Password, salt, function(err, hash) {
console.log('hashing and saving');
db.query(db insert code, function (error, rows, fields) {
if(error) {
console.log(error);
res.setHeader('500', { 'Content-Type': 'x-application/json'});
res.send({UserId: 0, ErrorMessage: 'Something terrible happened.'});
} else {
console.log('User created : ' + rows.insertId);
res.setHeader('200', { 'Content-Type': 'x-application/json'});
res.send({UserId: rows.insertId});
}
});
});
});
return next();
Tout cela fonctionne très bien. Ma db a le mot de passe crypté. Mais quand un utilisateur se connecte, je ne peux pas obtenir un résultat réussi de bcrypt.comparer:
db.query(get account code, function(error, rows, fields) {
if(rows.length == 1) {
bcrypt.compare(request.params.password, rows[0].Password, function(err,res) {
if(err) { console.log(err.toString()); }
if(res == true)
{
response.setHeader('200', { 'Content-Type': 'x-application/json' });
response.send({result: true});
} else {
response.setHeader('401', { 'Content-Type': 'x-application/json' });
console.log('invalid password');
response.send({result:false});
}
});
}
});
return next();
Et je finis toujours avec mot de passe invalide. Dois-je prendre le texte en clair le mot de passe et de les chiffrer de nouveau avant de le comparer à ce que je sors de la base de données?
OriginalL'auteur cmcd | 2013-02-10
Vous devez vous connecter pour publier un commentaire.
vous pouvez passer faire
bcrypt.genSalt
et l'utilisationbcrypt.hash(password, 10, function(err, hash) {..});
votre fonction de comparaison qui semble bon pour moi.
cela fonctionne bien pour moi:
Salut, je me demandais, si nous sommes à l'aide de la async fonctions, doivent-ils être dans une boucle comme dans votre exemple, ou pouvez-vous séparer les fonctions de hachage et de la comparaison des deux méthodes.
J'ai le même problème et je me demande s'il cause des problèmes si l'on définit la
hash
comme une chaîne de caractères?pour une raison que je reçois toujours
false
debcrypt.compare
, un naïf==
, ainsi que la fonction de la bibliothèquebuffer-equal-constant-time
donnetrue
(qui est correcte), donnant surbcrypt
ici.donner 10 nombre comme deuxième argument de la .hash() provoque une erreur à l'exécution.
OriginalL'auteur Gal Ben-Haim
Je ne sais pas si vous avez le même comme je l'ai fait, j'ai eu le même problème parce que ma table a une longueur de 45 caractères et je bcrypt compare si la longueur de hachage est diferent de 60 ans, elle retourne false. Il suffit d'augmenter la longueur de caractères dans votre tableau
OriginalL'auteur Ernesto Jara Olveda
Le mien était à cause de ma base de données de la colonne de ne pas avoir un assez grand varchar longueur. Un bon endroit pour vérifier.
OriginalL'auteur Ross Reicks
Cela fonctionne pour moi.
OriginalL'auteur sushilprj
J'ai eu ce même problème, mais je suis sûr que je ne suis pas d'encodage de mon mot de passe deux fois. Voici la chose.
bcrypt-nodejs mnp paquet est sur v0.0.3 et je suis en utilisant cette version. Je suis en train d'écrire l'algorithme pour stocker un mot de passe utilisateur sur enregistrer et lire un mot de passe utilisateur lors de la connexion.
L'interface est simple avec texte de saisie pour le champ e-mail et mot de passe d'entrée pour le champ mot de passe. Quand je soumettre la demande, je POSTE un appel à https://localhost... sur mon nœud local du serveur. Je peux enregistrer les données reçues et je peux voir le mot de passe enregistré est le même que le mot de passe inséré sur le frontend.
Le code utilisé pour stocker le mot de passe est:
Le code utilisé pour la lecture et la comparaison du mot de passe est:
Donc je vois le hachage de mot de passe, il est enregistré comme une chaîne de caractères comme $ert3435tF.02ri etc...
Mais chaque fois que je me connecte avec le même mot de passe je l'ai enregistré avec, okPwd est toujours faux. Pourquoi?
Même si j'ai des nations unies-commentaire le code commenté!
Mise à JOUR
La solution que j'ai trouvé était sur les méthodes. Le mot de passe ne doit pas être stocké et lu comme ça, c'est trop ...impoli !! La bonne méthode est mentionné ici Watch out! Il y a une erreur dans cette ligne directrice. bcrypt.hash(...) les fonctions des besoins 2 paramètre de l'objet et 2 rappels! Le dernier est celui qui est appelé à la fin du processus de hachage, le premier est appelé à suivre le processus de hachage. J'ai mis qu'un null et tout fonctionne bien.
J'avoue j'ai fait une autre erreur: j'ai utilisé bcrypt-nodejs paquet au lieu de brcrypt.
OriginalL'auteur Francesco
Juste modifier la longueur de caractères dans votre base de données attribuer à champ mot de passe, peut-être que le hash généré est plus grande que le champ peut soutenir
OriginalL'auteur GCH