Všechno v mém pasu-místní strategie se zdá být pracovní, s výjimkou verifyCallback, kde truthiness hodnocení validatesPassword
vrací true, je-bez ohledu na to. Problém by mohl pramenit z toho, že validatesPassword
je asynchronní funkce a Promise {<pending>}
výstup, zatímco funkce pracuje mimo pořadí není falešné:
z passwordUtils souboru:
async function validatesPassword(passwordInput, dbHash) {
let comparedInput = await bcrypt.compare(passwordInput, dbHash)
//console.log("this is whats returned from compared Input " + comparedInput)
return comparedInput;
}
Konzoly.protokol volání v validatesPassword
normálně tiskne po podmíněné prohlášení, v pase verifyCallback() funkce v můj pas, soubor se nazývá:
User.findOne(email)
.then((dbResponse) => {
//console.log(dbResponse[0][0]);
let user = dbResponse[0][0];
if (!user) { return done(null, false); }
//no error, but also no user
const isValid = validatesPassword(password, user.hash);
//const isValid = false;
if (isValid) {
return done(null, user);
} else {
return done(null, false);
}
})
.catch((err) => {
console.log(err);
done(err);
});
}
const strategy = new LocalStrategy({ usernameField: 'email', passReqToCallback: true }, verifyCallback);
passport.use(strategy)
...
Jak je vidět výše, jediný způsob, jak lze odvodit z false na výše uvedené podmíněné, je výslovně nastavení isValid
k false. Jaký by byl nejlepší způsob, jak se dostat podmíněný čekat na heslo porovnat (validatesPassword
) funkce a zhodnotit jeho vrácena logická funkce? Měl jsem promisify validatesPassword
a přidat podmíněné uvnitř (já jsem se snažil prováděcí sám marně), že funkce a projít všechny, že verifyCallback
funkce v my passport souboru?