У меня проблема с отображением моего собственного сообщения об ошибке флэш-памяти («Неверное имя пользователя» или «Неверный пароль») при сбое входа в систему.
Если я оставлю имя пользователя или пароль пустыми в форме, перенаправление на страницу входа в систему будет выполнено правильно, и появится сообщение об ошибке флэш-памяти по умолчанию «Отсутствуют учетные данные».
Если я ввожу несуществующее имя пользователя или неверный пароль, перенаправление на страницу входа также выполняется правильно, но сообщение не отображается. Может кто-нибудь помочь?
Мои маршруты:
// 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
Спасибо!