Как отправить сообщение об ошибке клиенту?

Я использую паспорт с локальной стратегией, но я хочу отправить сообщение и статус, когда 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"});
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
504
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам необходимо обновить контроллер входа в систему, например:

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

user944513 20.08.2018 12:16

Что вы можете! Попробуйте сами и дайте мне знать, если это работает / не работает. :)

UtkarshPramodGupta 20.08.2018 12:17

ваша функция работает нормально, не могли бы вы сказать мне, как я могу добиться этого с помощью async await

user944513 20.08.2018 12:18

Почему вы хотите использовать асинхронный режим? Какая-то конкретная причина? : /

UtkarshPramodGupta 20.08.2018 12:19

мой контроллер уже является асинхронным, поэтому я буду использовать здесь ожидание вместо обратного вызова

user944513 20.08.2018 12:21

На самом деле async / await предназначен для обещаний, но в паспорте по-прежнему используется традиционный метод обратного вызова. На Github паспорта открыта ветка для поддержки обещаний в паспорте. Смотрите здесь: github.com/jaredhanson/passport/issues/536. Короче говоря, вы пока не можете этого сделать. Кроме того, проголосуйте за (+1) мой ответ, если вы нашли мои ответы полезными. :)

UtkarshPramodGupta 20.08.2018 12:29

Другие вопросы по теме