Express JS / Node JS: браузеры не устанавливают cook ie, когда secure = true, sameSite: 'none' - PullRequest
4 голосов
/ 12 июля 2020

устанавливает повар ie, если я запускаю сервер локально, но когда он размещен в сети:

  1. Если secure = false, sameSite: 'none' , то я получаю следующую ошибку:

Cook ie «connect.sid» скоро будет отклонен, так как для атрибута «sameSite» установлено значение «none» или недопустимое значение без атрибута «secure». Чтобы узнать больше об атрибуте sameSite, прочтите https://developer.mozilla.org/docs/Web/HTTP/Headers/Set-Cookie/SameSite

, затем я попробовал с secure = true

if secure = true, sameSite: 'none' тогда я знаю, что он должен работать,

он работает и файлы cookie устанавливаются, когда сервер размещается локально. Но когда он размещен в heroku, Cook ie не установлены, и я не получаю ошибки.

Кажется, что веб-сайт клиента не защищен, но он показывает https в поле URL

Что я здесь делаю не так?

Конфигурация сеанса:

router.use(
    session({
        cookie: {
            secure: true,
            maxAge: 86400,
            sameSite: "none",
        },
        secret: process.env.SESSION_SECRET,
        resave: false,
        saveUninitialized: false,
    })
);

примечание: я уже включил cors с учетными данными, установленными на true Вкладка cookie была пуста на вкладке cookie XHR Внешний и внутренний серверы размещаются отдельно в heroku XMLHttpRequest используется для отправки почтового запроса с параметром withCredentials, установленным в значение true.

XHRPOST https://sih-drs-prototype-backend-2.herokuapp.com/api/outrages/login [HTTP / 1.1 200 OK 1625ms]

POST https://sih-drs-prototype-backend-2.herokuapp.com/api/outrages/login Статус 200 OK Версия HTTP / 1.1 Передано 367 B (размер 2 B)

Access-Control-Allow-Credentials
    true
Access-Control-Allow-Origin
    https://tempautocomplete.herokuapp.com
Connection
    keep-alive
Content-Length
    2
Content-Type
    application/json; charset=utf-8
Date
    Sun, 12 Jul 2020 14:06:42 GMT
Etag
    W/"2-vyGp6PvFo4RvsFtPoIWeCReyIC8"
Server
    Cowboy
Vary
    Origin
Via
    1.1 vegur
X-Powered-By
    Express
    
Accept
    */*
Accept-Encoding
    gzip, deflate, br
Accept-Language
    en-US,en;q=0.5
Connection
    keep-alive
Content-Length
    46
Content-Type
    application/json;charset=UTF-8
Host
    sih-drs-prototype-backend-2.herokuapp.com
Origin
    https://tempautocomplete.herokuapp.com
Referer
    https://tempautocomplete.herokuapp.com/static/
User-Agent
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0

1 Ответ

0 голосов
/ 02 сентября 2020

Проблема не в экспресс-сессии, она делает свое дело. Браузеры не разрешают файлы cookie, если ответ поступает от стороннего домена.

, если вы ищете обходной путь попробуйте этот npm пакет: should-send-same-site-none https://www.npmjs.com/package/should-send-same-site-none

Чтобы было ясно, браузер не отклоняет файлы cookie. Вместо этого файлы cookie хранятся под именем стороннего домена, с которого отправляется ответ.

Он отлично работает при локальном хостинге, поскольку запрос и ответ будут из одного домена (localhost)

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