#node.js #reactjs #express #cookies #express-session
#node.js #reactjs #экспресс #файлы cookie #экспресс-сессия
Вопрос:
После последних обновлений в Chrome браузер не сохраняет файлы cookie моего сервера. Ранее он работал, даже выдавая предупреждение об этом. Но теперь это не так.
Поскольку мое приложение react размещено на netlify, а мой сервер работает на AWS, оно имеет разные источники. Итак, я изменил настройки cookie в express-session с sameSite=None secure
параметрами следующим образом.
app.use(session({
secret: 'my secret',
name: 'my-react-app',
resave: false,
saveUninitialized: true,
cookie: {
secure: true,
sameSite: 'none',
maxAge: 24 * 60 * 60 * 1000,
httpOnly: true
}
}));
После установки secure: true
он даже не работает в Firefox. Веб-сайт обслуживается по протоколу https. Я перепробовал почти все комбинации с этими параметрами. Я что-нибудь упускаю? Будем признательны за любую помощь.
Ответ №1:
Наконец-то я нашел решение.
На самом деле, это не имеет особого отношения к настройкам экспресс-сеанса, на которые я потратил много часов. Основная причина этого — неправильно настроенный обратный прокси. В моем случае соединение между обратным прокси-сервером и сервером приложений не было https. Из-за этого флаг secure в файле cookie не применяется, что, в свою очередь, приводит к установке параметру SameSite значения по умолчанию ‘lax’. И именно поэтому мои cookie-файлы были отклонены в запросе с разными источниками.
Чтобы решить эту проблему, я должен установить X-Forwarded-Proto
в заголовке прокси.
Откройте файл конфигурации обратного прокси
sudo nano /etc/nginx/conf.d/sysmon.conf
в моем случае, и добавьте следующую строку.
proxy_set_header X-Forwarded-Proto $scheme;
Это перенаправит запрос по протоколу https.
И вам также необходимо установить «доверенный прокси» в express.
var app = express()
app.set('trust proxy', 1) // trust first proxy