Express.js - файлы cookie не отправляются после 3 часов работы сервера - PullRequest
0 голосов
/ 02 июля 2018

Я столкнулся с интересной проблемой, которую не знаю, как решить.

Я создал простой веб-сайт с базовым интерфейсом аутентификации, и при его развертывании все работает нормально.

База данных работает отлично, промежуточное ПО аутентификации работает именно так, как и должно, но внезапно, когда я захожу на веб-сайт, и я пытаюсь войти в систему через несколько часов, я просто перенаправляюсь без файлов cookie. (Я пробовал на нескольких устройствах) Единственное, что работает, это перезапуск серверного процесса.

Используемые технологии:

  • Серверная ОС: Ubuntu 16.04.
  • HTTP-сервер: Nginx (используется в качестве обратного прокси-сервера для приложения Node.js)
  • Менеджер процессов: pm2
  • База данных: MongoDB
  • Экспресс-версия: 4.16.3.

Код моей страницы входа в систему:

app.post("/login", (req, res) => {
if (req.body.email && req.body.password){

  var email     = req.body.email;
  var password  = req.body.password;

  User.findOne({email})
  .then(user =>{
    if (!user) throw new Error("No user found.");
    bcrypt.compare(password, user.password)
    .then(correctPwd =>{
      if (!correctPwd) throw new Error("Wrong password.");
      return user.generateAuthToken();
    })
    .then(token => {


      // The problematic part

      res.cookie("auth", token, authCookie)
      .redirect(redirect); // redirect is a variable passed by a function


    })
    .catch((err)=>{
      res.status(400).redirect(redirect);
    })
  })
  .catch((err)=>{
    res.clearCookie("auth").status(400).redirect(redirect);
  });
} else res.clearCookie("auth").status(400).redirect(redirect);
});

Мой конфиг Nginx:

location / {
    proxy_pass http://localhost:8080/;
    proxy_pass_header Set-Cookie;
    proxy_pass_header P3P;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}
...