Экспресс сессионный 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,
...
}
Надеюсь, что это поможет любому пройти через то же самое, поскольку на данный момент этот вопрос лучше всего подходит для решения этой проблемы.