Экспресс сессионный cookie не отправляется в openshift с https и безопасным флагом

Получил странную проблему, я использую Express и в разработке мы используем http и имеем secure: false для куки-файла сеанса, однако теперь мы переходим к openshift, мы включили https, полагая, что это будет простое начинание, но наши куки-файлы не отправляются обратно с ответами. Однако, если мы отключим https и вернемся обратно к http в openshift, он будет работать нормально, и куки будут отправлены.

Итак, вот пример того, как выглядит файл cookie:

var setupSession = function() {
    var sessionConfig = {
        secret: environmentVars.cookie.secret,
        name: environmentVars.cookie.name,
        maxAge: environmentVars.cookie.expiry,
        domain: environmentVars.cookie.domain,
        httpOnly: true,
        secure: environmentVars.cookie.secure, // true when using https
        secureProxy: environmentVars.cookie.secure, // true when using https
        signed: true
    };
    app.set('trust proxy', 1); // Just added this, still no luck
    app.use(session(sessionConfig));
};

Таким образом, вышеприведенное запускается, когда приложение запускается, и, как отмечено в комментариях, когда мы используем безопасное соединение, для нас устанавливаются переменные среды, и когда вышеупомянутое используется в сочетании с HTTPS, куки не отправляются обратно из экспресс, однако Файлы cookie openshift отправляются обратно, как шестеренки и т. д. Опять же, с помощью http и отключения защищенного материала все работает нормально, мы все получаем куки и радуемся. Все ответы работают, и данные отправляются обратно, просто отсутствует заголовок set-cookie для файлов cookie приложений (но, как уже упоминалось, не openshift).

Таким образом, действительный сертификат не настроен в nodejs, он настроен на openshift как псевдоним с примененным сертификатом. Так что экспресс действительно не имеет ни малейшего представления о том, что он запускается по протоколу HTTPS, за исключением переменных среды, через которые он передается, и порта, который он обеспечивает механизмом, который его запускает.

У кого-нибудь еще было что-то подобное или есть идеи о том, что мы можем попытаться решить или диагностировать? Я немного почитал, и люди предложили попробовать доверенный прокси и secureProxy, что было сделано, но все еще не повезло.

2 ответа

Решение

Вот и получается, что я просто идиот, это должно выглядеть так:

var setupSession = function() {
    var sessionConfig = {
        secret: environmentVars.cookie.secret,
        name: environmentVars.cookie.name,
        maxAge: environmentVars.cookie.expiry,
        domain: environmentVars.cookie.domain,
        httpOnly: true,            
        secureProxy: environmentVars.cookie.secure, // true when using https
        signed: true,
        cookie: {
            secure: environmentVars.cookie.secure, // true when using https
        }
    };
    app.set('trust proxy', 1); // Just added this, still no luck
    app.use(session(sessionConfig));
};

Все работает сейчас:)

У меня была похожая проблема с экспресс-сессией, и после многих испытаний виновником для меня была настройка cookie.domain. Браузеры не сохранят куки.

Вот как я устанавливал значение:

cookie: { 
  ...
  domain: process.env.OPENSHIFT_CLOUD_DOMAIN,
  ...
}

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

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