有一个奇怪的问题,我使用Express并且在开发中我们使用http并且secure: false
用于会话cookie,但是现在我们转向openshift我们已经转向https认为这将是一个简单的努力但是我们的cookie不会随回复一起寄回。但是,如果我们关闭https并在openshift上恢复为http,它可以正常运行并发送cookie。
以下是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一起使用时,不会从快递,然后openhift饼干被发回,像齿轮一样等。再次与http和禁用安全的东西它工作正常我们都得到饼干和欢喜。所有响应都工作,数据被发回,只是应用程序cookie缺少set-cookie标头(但提到的不是openhift)。
因此,实际证书未在nodejs中设置,它在openshift上设置为应用证书的别名。所以表达真的不知道它是在https中运行的,除了它传递的环境变量以及由运行它的齿轮提供的端口。
那么,是否有其他人对我们可以尝试解决问题或诊断问题有什么相似或有任何想法?我做了一些阅读,人们建议尝试信任代理和secureProxy,这已经完成但仍然没有运气。
答案 0 :(得分:1)
所以事实证明我只是一个白痴,它应该看起来像:
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));
};
现在一切正常:)
答案 1 :(得分:0)
我在快递会议上有类似的问题,经过多次试验,我的罪魁祸首是设置cookie.domain。浏览器不会保存cookie。
这就是我设置值的方式:
cookie: {
...
domain: process.env.OPENSHIFT_CLOUD_DOMAIN,
...
}
希望它可以帮助任何人通过相同的,因为当时这是最适合的stackoverflow问题来分享这个。