Ich habe verschiedene ähnliche Fragen hier durchgemacht und ich habe sie alle ausprobiert, aber trotzdem ist das Ergebnis immer "falsches Passwort".Knoten js - Bcrypt - Vergleichsmethode gibt false für das korrekte Eingabe-Passwort zurück
Ich benutze bcrypt für nodejs und meine Passwort-Hashes werden in einer Postgresql-Datenbank gespeichert.
Die hash
und compare
Methoden sind wie folgt:
generateHash : function(password, callBack){
bcrypt.genSalt(8, function(err, salt) {
bcrypt.hash(password, salt, callBack);
});
}
validPassword : function(password, callBack){
bcrypt.compare(password, this.password, callBack);
}
ich diese Funktion in dem folgenden Code ein:
//Generating hashing and DB storing
User.generateHash(password, function(err, hash) {
// if there is no user with that email
// create the user
var newUser = User.build({
email: email,
password: hash
})
.save()
.then(function(newUser) {
return done(null, newUser);
})
.catch(function(err){
return done(err, false);
});
});
//...
//Checking the password input for login
user.validPassword(password, function(err, res) {
if(err) throw err;
if(!res){
return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.'));
}
else{
// all is well, return successful user
return done(null, user);
}
});
Ich hoffe, das war klar. Danke im Voraus. Ciao.
Aktualisierung I:callBack
hinzugefügt zu , obwohl dies das Problem nicht behoben hat. Und ich habe auch den Wert überprüft, es ist korrekt und wie erwartet. Also, das Problem ist immer noch vorhanden.
Könnten Sie einen Beispiel-'this.password'-Wert veröffentlichen, damit ich sehen kann, ob es tatsächlich ein gültiger bcrypt-Hash ist? Welches bcrypt Modul verwendest du? Und es könnte nützlich sein, hinzuzufügen, wo die Funktionen 'validPassword' und 'generateHash' definiert sind. (wie es scheint, sind sie Eigenschaften eines Objekts wegen der Art, wie Sie sie definieren) – leroydev