如何使用heroku + node.js + express设置安全Cookie?

我有一个node.js应用程序在雪松堆栈上运行,我很困惑为什么安全cookie不起作用。

"express": "3.0.3", "node": ">=0.8.14", ... app.use(express.session({ secret : 'somesecret', store : // store works fine, sessions are stored key : 'sid', cookie : { secure : true, // it works without the secure flag (cookie is set) proxy : true, // tried using this as well, no difference maxAge: 5184000000 // 2 months } })); ... 

本地主机上的一切工作正常,但在Heroku上我似乎无法设置一个安全的cookie。 我究竟做错了什么? 文档说负载平衡器终止SSL,是否在那里configuration?
非常感谢

Heroku在到达您的应用程序之前终止SSL是正确的。 这会导致express查看非sslstream量,这可能是为什么它拒绝在Heroku上运行时设置cookie。

Heroku使用原始协议设置X-Forwarded-Proto标头。 我没有testing过这个,但根据文档,你必须通过设置trust proxy来表示尊重trust proxy头的信息。 在req.protocol 这里find更多的细节。

问题是我在错误的地方设置了proxy: true ,它应该如下所示:

 ... app.enable('trust proxy'); // optional, not needed for secure cookies app.use(express.session({ secret : 'somesecret', store : ..., // store works fine, sessions are stored key : 'sid', proxy : true, // add this when behind a reverse proxy, if you need secure cookies cookie : { secure : true, maxAge: 5184000000 // 2 months } })); ... 

添加以及app.enable('trust proxy'); 如果你想在Heroku托pipe的应用程序的某个地方使用req.protocol ,可以使用req.protocolbuild议。

如果你使用cookie会话 ,应该看起来像这样:

  app.use require('cookie-session') secret: '<secret>' secureProxy: true