#node.js #express #passport.js #mean-stack #mern
Вопрос:
../Passport.js
const LocalStrategy = require("passport-local").Strategy;
const bcrypt = require("bcrypt");
const mongoose = require("mongoose");
const User = require("../models/User.js");
module.exports = function (passport) {
passport.use(
new LocalStrategy(
{ usernameField: "email", passwordField: "password" },
(email, password, done) => {
console.log(email, password);
User.findOne({ email: email }, async function (err, user) {
console.log(password, user.password);
if (err) {
return done(err);
}
if (!user) {
return done(null, false, {
message: "No User found against this email address",
});
} else if (!user.isEmailVerified) {
return done(null, false, {
message: "User needs to verify the OTP",
});
}
var result = await bcrypt.compare(password, user.password);
if (result) {
return done(null, user);
}
if (!result) {
return done(null, false, { message: "Incorrect Password" });
}
});
}
)
);
};
user.js
router.post(
"/login",
validateEmail,
validatePassword,
validator,
(req, res, next) => {
passport.authenticate(
"local",
{ session: false },
function (err, user, info) {
console.log("::Err::", err, "::User::", user, "::Info::", info);
if (err) {
next(new BadRequestResponse(err));
}
if (!user) {
next(new UnauthorizedResponse(info.message, 401));
} else {
next(new OkResponse({ user: user.toAuthJSON() }));
}
}
)(req, res, next);
}
);
Я уже целую вечность пытаюсь найти причину, по которой bcrypt продолжает возвращать «ложь», хотя и пароль, который был введен, и пароль, который был введен, одинаковы. Пожалуйста, игнорируйте промежуточные программы после маршрутизатора «/login», так как они не влияют на весь поток
Комментарии:
1. просто чтобы проверить что-нибудь нулевое или неопределенное
2. консоль не имеет никакого отношения к вопросу, дорогая. Можете ли вы запустить другую часть кода в сухом виде
3. согласно документации, Bcrypt должен возвращать значение true, если bcrypt.compare(myPlaintextPassword, хэш, функция(ошибка, результат) { // результат == true });
4. Это именно мой обходной путь, но я каждый раз получаю ложь