Я использую паспорт с локальной стратегией, но я хочу отправить сообщение и статус, когда credential не соответствует или (user is not exit is DB)
вот код
router.js
const passport = require('passport');
const passportConfig = require('../passport')
const passportSignIn = passport.authenticate('local', { session: false });
router.route('/login',)
.post(passportSignIn,controller.login)
в файле контроллера
login: async (req, res, next) => {
console.info(req.body);
res.json({status:200})
}
Passport.js
passport.use(new LocalStrategy({
usernameField: 'email'
}, async (email, password, done) => {
const user = await db.User.findOne({where: {email: email}});
if (!user) {
return done(null, false,{message:"No user exit"});
}
const isMatch = await bcrypt.compare(password, user.dataValues.password);
console.info(isMatch, 'isMatch');
if (!isMatch) {
return done(null, false);
}
// Otherwise, return the user
done(null, user);
}))
Код клиента
когда пользователь нажимает кнопку login, он сначала переходит к пути /login, он переходит к функции passportSignIn или функции ниже.
`new LocalStrategy({
usernameField: 'email'
}, async (email, password, done) => {`
теперь, если пользователь не найден, я хочу отправить это сообщение клиенту в качестве ответа («Нет выхода пользователя»)
return done(null, false,{message:"No user exit"});



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам необходимо обновить контроллер входа в систему, например:
login: (req, res, next) => {
console.info(req.body);
passport.authenticate('yourStrategy', function(err, user, info) {
if (err) {
return res.status(500).json("Internal Server Error");
}
if (!user) {
// This 'info' variable below would be - { message: "No user exit" }
// as you passed in the done() callback as the third param
return res.status(404).json(info.message);
}
}
}
Что вы можете! Попробуйте сами и дайте мне знать, если это работает / не работает. :)
ваша функция работает нормально, не могли бы вы сказать мне, как я могу добиться этого с помощью async await
Почему вы хотите использовать асинхронный режим? Какая-то конкретная причина? : /
мой контроллер уже является асинхронным, поэтому я буду использовать здесь ожидание вместо обратного вызова
На самом деле async / await предназначен для обещаний, но в паспорте по-прежнему используется традиционный метод обратного вызова. На Github паспорта открыта ветка для поддержки обещаний в паспорте. Смотрите здесь: github.com/jaredhanson/passport/issues/536. Короче говоря, вы пока не можете этого сделать. Кроме того, проголосуйте за (+1) мой ответ, если вы нашли мои ответы полезными. :)
могу я здесь использовать async await