NodeJS Express Паспорт - req.user не определен - PullRequest
0 голосов
/ 13 февраля 2020

Я тестирую аутентификацию в небольшом приложении, используя экспресс + паспорт и пытаюсь сделать это без сессий. Таким образом, пользователь должен предоставить имя пользователя и пароль для каждого действия. После авторизации (passport.authenticate ()) в следующем промежуточном программном обеспечении request.user не определен, но в паспортном faq говорится, что «Если аутентификация прошла успешно, будет вызван следующий обработчик и свойство req.user будет установлено для аутентифицированного пользователя». Что здесь не так?

список

const express = require('express');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const app = express();

app.use(express.json());
app.use(express.urlencoded({
  extended: true
}));

passport.use('login',
  new LocalStrategy({
      session: false,
      passReqToCallback: true
    },
    (req, username, password, done) => {
      // passport.use(new LocalStrategy((username, password, done) => {
      console.log('  In passport.use(new LocalStrategy...)');
      console.log('req.body = ', req.body);
      console.log('req.user = ', req.user);
      const user = {
        username: username,
        password: password,
      };
      if (user.username === 'Petr' && user.password === '123') {
        console.log('Username and password OK');
        return done(null, user);
      }
      return done(null, false, {
        message: 'Wrong username or password!'
      });
    },
  ),
);

app.post('/', passport.authenticate('login', {
  session: false,
  successRedirect: '/success',
  failureRedirect: '/failure',
}));

app.use('/', (req, res, next) => {
  console.log('  In app.use /');
  console.log('req.body = ', req.body);
  console.log('req.user = ', req.user);  //HERE req.user is undefined!!!
  next();
});

app.use('/', (req, res, next) => {
  console.log('Request at /');
  next();
});
app.use('/success', (req, res, next) => {
  res.send('success');
  next();
});
app.use('/failure', (req, res, next) => {
  res.send('failure');
  next();
});

app.listen(8000, () => {
  console.log('Server "Test" starts at port 8000');
});

1 Ответ

1 голос
/ 13 февраля 2020

Вы установили состояние сеанса для своего приложения? Вы должны добавить это так ...

app.use(session({ secret: 'anything' }));
app.use(passport.initialize());
app.use(passport.session());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...