【发布时间】:2017-03-16 04:29:49
【问题描述】:
遇到了一个奇怪的问题,我正在使用 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));
};
所以上面是在应用程序启动时运行的,如 cmets 中所述,当我们使用安全连接时,会为我们设置环境变量,当上面与 HTTPS 结合使用时,不会从快递,但是 openshift cookie 被发回,比如一号齿轮等。再次使用 http 并禁用安全的东西它工作正常,我们都得到了 cookie 并欢欣鼓舞。所有响应都正常工作,数据被发回,只是应用程序 cookie 缺少 set-cookie 标头(但如前所述,不是 openshift 的)。
因此,实际的证书不是在 nodejs 中设置的,而是在 openshift 上设置为应用证书的别名。所以 express 真的不知道它是在 https 中运行的,除了它传递的环境变量和运行它的设备提供的端口。
那么有没有其他人有类似的事情,或者对我们可以尝试解决问题或诊断问题有什么想法?我做了一些阅读,人们建议尝试 trust proxy 和 secureProxy,这已经完成但仍然没有成功。
【问题讨论】:
-
查看这个问题的答案:stackoverflow.com/questions/14463972/… 同样的解决方案应该适用于 OpenShift。
-
哈哈!这不是你所期望的原因,我已经在做前面提到的代理,但是安全位应该在我没有做的
cookie:属性内。所以会发布答案。
标签: node.js cookies https openshift