如何使用heroku+;node.js+;快车?
我有一个node.js应用程序运行在Cedar堆栈上,我很困惑为什么安全cookie不起作用如何使用heroku+;node.js+;快车?,node.js,cookies,heroku,express,Node.js,Cookies,Heroku,Express,我有一个node.js应用程序运行在Cedar堆栈上,我很困惑为什么安全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 : {
"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
}
}));
...
在localhost上一切正常,但在heroku上,我似乎无法设置安全cookie。我做错了什么?假设负载平衡器终止SSL,是否需要在那里进行配置?非常感谢您认为Heroku在SSL到达您的应用程序之前终止SSL是正确的。这会导致express看到非ssl流量,这可能就是它在Heroku上运行时拒绝设置cookie的原因 Heroku使用原始协议设置
X-Forwarded-Proto
头。我没有对此进行测试,但根据文档,您必须告诉express按照文档中的说明设置trust proxy
,以尊重该标题中的信息。在req.protocol
解决方案下可找到其他详细信息
问题是我在错误的位置设置了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')@frism建议使用code>,以防您想在Heroku托管的应用程序中的某个地方使用req.protocol
。如果您正在使用它,应该如下所示:
app.use require('cookie-session')
secret: '<secret>'
secureProxy: true
app.use require('cookie-session')
秘密:''
secureProxy:true
谢谢,你说得对,必须明确。我想我把'proxy'属性放错了地方,它是用于会话选项的,但我把它放在cookie=>中错了。我接受这个答案,因为它指出了Heroku终止SSL连接的影响,即使trust proxy
设置与cookie处理无关。一旦允许,我也会发布我的固定代码。你不应该使用信任代理的额外选项将其限制为只信任第一个/第一个少数代理或其他什么吗?如果必须,你可以更精确地控制信任。当时,我认为Express3.0.3没有记录这一点,我也不关心安全方面,但可以肯定的是,proxy addr包为您提供了这种级别的控制。