Я столкнулся с интересной проблемой, которую не знаю, как решить.
Я создал простой веб-сайт с базовым интерфейсом аутентификации, и при его развертывании все работает нормально.
База данных работает отлично, промежуточное ПО аутентификации работает именно так, как и должно, но внезапно, когда я захожу на веб-сайт, и я пытаюсь войти в систему через несколько часов, я просто перенаправляюсь без файлов 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;
}