Паспорт - прошивать сообщения без сессии - PullRequest
0 голосов
/ 17 мая 2019

У меня есть как локальная, так и 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);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...