У меня есть как локальная, так и jwt-стратегия для API-аутентификации, и я не хочу использовать куки-файлы, которые, по-видимому, являются проблемой при перепрошивке сообщений об ошибках.Я получаю UnhandledPromiseRejectionWarning: Error: req.flash() requires sessions
.Есть ли способ получить эти сообщения в виде ответов API вместо 401 unauthorized
?
Вот промежуточное программное обеспечение локальной аутентификации:
const requireLocalAuth = passport.authenticate("local", {
session: false,
failureFlash: true
});
Вот моя локальная стратегия с сообщениями:
const passportLogin = new PassportLocalStrategy(
{
usernameField: "email",
passwordField: "password",
session: false,
passReqToCallback: true
},
async (req, email, password, done) => {
const schema = Joi.object().keys({
email: Joi.string()
.trim()
.email()
.required(),
password: Joi.string()
.trim()
.min(6)
.max(12)
.required()
});
try {
const form = await Joi.validate(req.body, schema);
} catch (err) {
return done(null, false, { message: err.details[0].message });
}
try {
const user = await User.findOne({ email: email.trim() });
if (!user) {
return done(null, false, { message: "Email does not exists." });
}
user.comparePassword(password, function(err, isMatch) {
if (err) {
return done(err);
}
if (!isMatch) {
return done(null, false, { message: "Incorrect password." });
}
return done(null, user);
});
} catch (err) {
return done(err);
}
}
);
Редактировать: я сделал этот пользовательский обратный вызов с помощью отладчика и проб и ошибок, кажется, работает то, что я хочу.Это нормально?
const requireLocalAuth = function(req, res, next) {
passport.authenticate("local", function(err, user, info) {
if (err) {
return next(err);
}
if (!user) {
return res.status(422).send(info);
}
req.user = user;
next();
})(req, res, next);
};