Получение ошибки: невозможно установить заголовки после их отправки клиенту - PullRequest
0 голосов
/ 10 ноября 2018

Я недавно добавил аутентификацию на свой сайт, используя bcrypt. При аутентификации bcrypt сравнивает пароли.

Если пароли совпадают, req.session устанавливается как cookie и записывается в mongodb с использованием connect-mongodb-session. Но при перенаправлении на /events приложение вылетает и выдает ошибку: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

Я использую руль для отображения моего HTML-кода

маршрут аутентификации:

Router.get('/', (req, res) => {
  res.status(200).render('login', {pageTitle: 'Log In'});
})

Router.post('/', (req, res) => {
  //Authenticate user
  const username = req.body.username;
  const pass = req.body.password;

  User.findOne({username: username}).then((user) => {
    if (user) {
      //Validate password
      console.log(user);
      console.log(user.password);
      bcrypt.compare(pass, user.password).then((doMatch) => {
        console.log(doMatch);
        //Check if password match
        if (doMatch) {
          //To use session use express-session package
          req.session.isLoggedIn = true;
          req.session.user = user;
          req.session.save((err) => {
            console.log(err);
            res.redirect('/');
          });
          return res.redirect('/events');
        } else {
          res.redirect('/');
        }
      }).catch((err) => {
        console.log(err);
      });
    } else {
      return res.redirect('/');
    }
  }).catch((err) => {
    console.log(err);
  });

});

маршрут событий:

Router.get('/events', (req, res) => {
  if (req.session.isLoggedIn) {

  Event.find({}, (err, events) => {
    res.render('events', {
      prods: events,
      pageTitle: 'Events',
      path: '/events',
      hasProducts: events.length > 0
    });
  }).catch((err) => {
    console.log(err);
  });

} else {
  console.log('User not authenticated');
  res.status(401).send('User not authenticated');
}

});

1 Ответ

0 голосов
/ 10 ноября 2018

Эти строки виновны.

req.session.save((err) => {
            console.log(err);
            res.redirect('/');
          });
          return res.redirect('/events');

Здесь вы передаете обратный вызов в save и сразу же перенаправляете res.redirect('/events'). Через некоторое время при перенаправлении обратного вызова res.redirect('/'); выдает ошибку.

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