Экспресс-сессия не работает в производстве / развертывании

Express-Session работает в среде разработки, так как устанавливает файл cookie connect.sid в моем браузере. Однако на производстве он не сохраняет файл cookie и вместо того, чтобы использовать один и тот же сеанс, каждый раз создает новый. Я считаю, что проблема будет решена, если я смогу каким-то образом сохранить сторонние файлы cookie, поскольку мое приложение было развернуто с использованием Heroku. Наконец, я также использовал express-cors, чтобы избежать проблемы CORS (не знаю, имеет ли это какое-либо отношение к проблеме с файлами cookie). Я также установил {credentials: true} в cors, {withCredentials: true} в Axios.


person Hugo    schedule 17.01.2021    source источник
comment
Здесь недостаточно архитектурной информации, чтобы мы могли помочь. Покажите свой код инициализации экспресс-сессии. Точно опишите, с каким URL-адресом запроса создается сеанс, а затем с каким последующим URL-адресом создается новый сеанс. Затем покажите точный клиентский код, который создает первый сеанс, и второй клиентский код, который не имеет доступа к этому же сеансу. Показать все URL-адреса точно так, как они есть в реальном мире.   -  person jfriend00    schedule 18.01.2021
comment
Поскольку вы можете быть здесь новичком, вопросы о коде всегда должны отображать соответствующий код. Вы получите ответы точнее и быстрее, если покажете актуальный и актуальный код. Это позволяет нам увидеть вашу конкретную проблему и предложить конкретное решение вместо того, чтобы пытаться преподавать целую главу книги, чтобы угадать, что может случиться в вашей ситуации, и объяснить общее решение со всеми возможностями. Здесь вообще нет взаимодействия в первый час, потому что ваш вопрос слишком расплывчатый, не содержит вашего кода и не описывает ситуацию достаточно подробно.   -  person jfriend00    schedule 18.01.2021


Ответы (2)


Проблема решена! - ›Добавить sameSite: 'none' Полная конфигурация cookie (экспресс-сессия) для производства:

cookie: {httpOnly: true, secure: true, maxAge: 1000 * 60 * 60 * 48, sameSite: 'none'}

person Hugo    schedule 19.01.2021

Heroku использует обратный прокси. Он предлагает конечные точки https, но затем перенаправляет незашифрованный трафик на веб-сайт.

Попробуйте что-нибудь вроде

app.enable('trust proxy')

И проверьте https://expressjs.com/en/guide/behind-proxies.html

person Bergur    schedule 18.01.2021
comment
Спасибо за это! Я только что исправил проблему. ‹App.enable ('trust proxy')› не сработало, но насчет прокси-сервера heroku вы правы. Поскольку я использую экспресс-сеанс, мне просто нужно было добавить следующую строку в cookie.sameSite. sameSite: cookie: {httpOnly: true, secure: true, maxAge: 1000 * 60 * 60 * 48, sameSite: 'none'} - person Hugo; 19.01.2021