Экспресс: проблема с пользовательским флэш-сообщением в Passport.js LocalStrategy - PullRequest
0 голосов
/ 07 ноября 2019

У меня проблема с отображением моего собственного сообщения об ошибке флэш-памяти («Неверное имя пользователя» или «Неверный пароль») при сбое входа в систему.

  • Если я оставлю имя пользователя или пароль пустыми в форме, перенаправление на страницу входа в систему будет выполнено правильно, и появится сообщение об ошибке флэш-памяти по умолчанию «Отсутствуют учетные данные».

  • Если я ввожу несуществующее имя пользователя или неверный пароль, перенаправление на страницу входа также выполняется правильно, но сообщение не отображается. Может кто-нибудь помочь?

Мои маршруты:

// GET request for signing a user in
router.get("/user/log-in", user_controller.user_log_in_get);

// POST request for logging a user in
router.post("/user/log-in", user_controller.user_log_in_post);

Мой контроллер:

exports.user_log_in_get = function(req, res, next) {
  res.render("log_in_form", { title: "Log in", messages: req.flash("error") });
};

exports.user_log_in_post = passport.authenticate("local", {
  successRedirect: "/",
  failureRedirect: "/clubhouse/user/log-in",
  failureFlash: true
});

Использование паспорта:

passport.use(
  new LocalStrategy((username, password, done) => {
    User.findOne({ username: username }, (err, user) => {
      if (err) return done(err);
      if (!user) {
        return done(null, false, { error: "Incorrect username" });
      }
      bcrypt.compare(password, user.password, (err, res) => {
        if (res) {
          // passwords match! log user in
          return done(null, user);
        } else {
          // passwords do not match!
          return done(null, false, { error: "Incorrect password" });
        }
      });
      return done(null, user);
    });
  })
);

passport.serializeUser(function(user, done) {
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  User.findById(id, function(err, user) {
    done(err, user);
  });
});

app.use(passport.initialize());
app.use(passport.session());

Нижняя часть моего логина (мопс):

if messages
   ul
    for message in messages
     li!= message

Спасибо!

...