Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用heroku+;node.js+;快车?_Node.js_Cookies_Heroku_Express - Fatal编程技术网

如何使用heroku+;node.js+;快车?

如何使用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 : {

我有一个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 : {
            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'),以防您想在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包为您提供了这种级别的控制。