Я успешно внедрил passport-local в свое веб-приложение Express / Mongoose, но мне не удается понять, как правильно отобразить сообщение об ошибке при входе в систему.
Вот мой маршрут входа в систему:
app.get('/login', function(req, res) {
res.render('user/login', {
});
});
С таким маршрутом, как я могу сообщить о неверном логине? Если вход успешен, он запишет id
/ username
в объект req.user
, но это не поможет мне в маршруте "GET /login"
, потому что в случае успеха вы будете перенаправлены на страницу, на которую хотите перейти .
Это означает, что req.user
всегда будет undefined
, когда вы GET
войдете на страницу входа.
Я хочу, чтобы я мог написать сообщение, говорящее что-то вроде: «Эй, неверный логин!» когда происходят следующие вещи:
- Пользователь не существует.
- Предоставленный пароль не совпадает, но пользователь существует.
Я мог бы хотеть вывести другое сообщение в зависимости от того, что произошло.
Когда я реализовал LocalStrategy, я использовал этот код:
passport.use(new LocalStrategy({
usernameField: 'email'
},
function(email, password, fn) {
User.findOne({'login.email': email}, function(err, user) {
// Error was thrown.
if (err) {
return fn(err);
}
// User does not exist.
if (!user) {
return fn(null, false);
}
// Passwords do not match.
if (user.login.password != utility.encryptString(user.login.salt + password)) {
return fn(null, false);
}
// Everything is good.
return fn(null, user);
});
}
));
Как видите, есть некоторые проблемы, но именно так автор PassportJS настроил свое приложение. Как мы можем получить доступ к тому, что возвращает Стратегия?
Например, если он выдаст ошибку, что мне вообще нужно вызывать, чтобы получить доступ к err
?
Спасибо.