如何使用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.protocol
build议。
如果你使用cookie会话 ,应该看起来像这样:
app.use require('cookie-session') secret: '<secret>' secureProxy: true