Cookie-файлы не сохраняются в Chrome даже после установки SameSite: ‘none’ и secure: true для веб-приложения MERN stack

#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