Как отправить сообщение клиенту с помощью стратегии Passport.js - PullRequest
0 голосов
/ 20 ноября 2019

новичок с Passport.js здесь пытается сделать простую вещь. Я просто хочу отправить пользовательское сообщение в мой интерфейс, используя im "passport": "^ 0.4.0" и "express": "^ 4.17.0" и "passport-local": "^ 1.0. 0 ", но я не могу заставить его работать. Я видел кое-что по-другому в Express 4, пытался загрузить connect-flash, но не смог заставить его работать.

Это обычно отправляет сообщение с ошибкой:

res.status(401).send({
    message: 'Authentication key expired'
});

Теперь япытаясь сделать это с помощью стратегии паспорта, , но, похоже, ничего не отправляет клиенту , но он отправляет общий 401 без специального сообщения:

  passport.use(
    new LocalStrategy({usernameField: "login", passwordField: "password"}, (login, password, done) => {
      User.findByLogin(login).then(async user => {
        if (!user) {
          return done(null, false, { message: 'Incorrect username.' });
        }
        if (!user.validPassword(password)) {
          return done(null, false, { message: 'Incorrect password.' });
        }
        let subscription = await user.getValidSubscription();
        if (!subscription) {
          return done(null, false, {
            message: 'Your subscription has expired.'
          });
        }
        user.dataValues.expiration = subscription.expiration;
        return done(null, user);
      });
    })
  );

Опять же, я знаю, что этопроблема с флеш-сообщениями и прочим, но разве нет простого способа отправить собственное сообщение? Все, что мне нужно, это то, что «Неверное имя пользователя» дойдет до моего интерфейса. Я провел несколько дней в этом и все еще ничего. Заранее спасибо!

Правка1: Сделано понятнее.

1 Ответ

0 голосов
/ 20 ноября 2019

Попробуйте установить флэш с npm install connect-flash

После этого перейдите в файл app.js и напишите:

var flash = require('connect-flash'); app.use(flash())

Внутри вашей паспортной функции добавьтеthis passReqToCallback

{ usernameField : 'login', passwordField : 'password', passReqToCallback : true }// allows us to pass back the entire request to the callback

И затем внутри ваших параметров (логин, пароль, готово) вы можете передать объект запроса следующим образом (req,login, password, done)

Наконец вы можете отправитьсообщение вроде этого

if (!user.validPassword(password)) { return done(null, false, req.flash('signupMessage', 'Incorrect username.')); }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...