Почему Bcrypt всегда возвращает false, даже если код выглядит нормально

#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. Это именно мой обходной путь, но я каждый раз получаю ложь