Файл cookie экспресс-сессии не отправляется во внешний интерфейс, если я устанавливаю secure=true в сеансе выражения

Я пытаюсь установить файл cookie для хранения сеанса с помощью экспресс-сеанса. Я отправляю запросы через HTTPS.

app.use(session({
    secret: env.SESSION_SECRET,
    resave: false,
    saveUninitialized: false,
    cookie: {
        secure: true, // Ensure secure is set to true for HTTPS
        sameSite: 'none', // Required for cross-origin cookies
        httpOnly: true,
        maxAge: 60 * 60 * 1000 // 1 hour         
    },
    rolling: true,
    store: MongoStore.create({
        mongoUrl: env.MONGODB_CONNECTION_STRING
    })
}));

Если бы я только поставил:

cookie: {
        httpOnly: true,
        maxAge: 60 * 60 * 1000 // 1 hour         
    },

Затем браузер получает файл cookie, но он не работает, поскольку поступает из https и перекрестного происхождения. Если я поставлю:

cookie: {
        secure: true, // Ensure secure is set to true for HTTPS
        sameSite: 'none', // Required for cross-origin cookies
        httpOnly: true,
        maxAge: 60 * 60 * 1000 // 1 hour         
    },

Тогда cookie вообще не будет получен во внешнем интерфейсе. Я развернул как интерфейсную, так и серверную часть в Vercel.

Я попытался поместить в файл cookie secure: true, SameSite: 'none', но тогда файл cookie вообще не был получен во внешнем интерфейсе.

Для понимания вопроса уточните пожалуйста - В заголовке поста secure написано true, то же в третьем коде false :secure:false, нет ли здесь опечатки? Дополнительный момент, который следует уточнить: это отправляется по http или https?

WeDoTheBest4You 06.06.2024 11:40

Я обновил вопрос. И да, он отправляется по https.

Mohit Sharma 06.06.2024 12:33

Чтобы устранить проблему, попробуйте выполнить проверку false.

WeDoTheBest4You 06.06.2024 12:52

Я сделал прокатку: ложь. Но файл cookie по-прежнему не отправляется. Когда я устанавливаю secure: true, сервер не отправляет файлы cookie, в противном случае он отправляет.

Mohit Sharma 06.06.2024 13:43

переход на false был запрошен для тестирования на основе документации expressjs.com/en/resources/middleware/session.html. Пожалуйста, ознакомьтесь с подразделами, включенными в него и неинициализированными. Сводка меняется: true uninitialized: false не будет отправлять файлы cookie. Цитируемый текст: «Примечание. Если для этого параметра установлено значение true, а для параметра saveUninitialized установлено значение false, файл cookie не будет установлен в ответе с неинициализированным сеансом. Этот параметр изменяет поведение только тогда, когда для запроса был загружен существующий сеанс. ."

WeDoTheBest4You 07.06.2024 03:55

В дополнение к моему предыдущему комментарию, пожалуйста, проверьте этот пост: stackoverflow.com/questions/62862094/… В основном он состоит из двух пунктов: SameSite:none и app.set('trust proxy', 1); Посмотрите, применимо ли это к вашему случаю.

WeDoTheBest4You 07.06.2024 03:57

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

WeDoTheBest4You 07.06.2024 03:59

Проблема все еще актуальна?

WeDoTheBest4You 12.06.2024 04:27

Да, проблема решена. Я добавил proxy: true в сеансе, и теперь он работает.

Mohit Sharma 12.06.2024 11:44

Спасибо за обновление. Другим будет полезно, если вы обновите это решение в качестве ответа на сообщение.

WeDoTheBest4You 12.06.2024 11:46

Сделаю. Спасибо!

Mohit Sharma 13.06.2024 12:02
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
11
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема решена путем установки доверенного прокси.

app.set('trust proxy', 1) // trust first proxy

Мохит Шарма подтвердил то же самое в своих комментариях.

Цитата:

  1. Express JS/ Node JS: браузеры не устанавливают файлы cookie, если secure=true, SameSite: 'none'

  2. экспресс-сессия

Другие вопросы по теме

Решение проблем с проверкой подписи Webhook в Stripe с помощью Express.js
Клиент Thunder, зашифрованный пароль невозможен для входа в систему, произошла ошибка сервера
Почему я могу отлично протестировать метод удаления в Postman, но не в браузере?
Изображения не отображаются на стороне клиента
TS2339: ошибка расширения экспресс-запроса (например, req.payload)
Во время тестирования с клиентом Thunder приходят все данные, но данные не поступают по определенному идентификатору или параметру
Конечная точка запроса на Express не перестанет загружаться, даже если я установлю статус ответа (проблемы с Multer и Express)
API конвертера файлов HTML в PDF работает в локальной среде, но не при развертывании (node.Js, Express.Js, html-pdf, веб-службы Azure)
Форма регистрации — входные данные извлекают нулевые значения из внешнего интерфейса в базу данных (Express/PostgreSQL)
Не удалось подключиться к кластеру MongoDB через NodeJS