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

hle*_*lev 11 cookies heroku node.js express

我有一个在Cedar堆栈上运行的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
        }
}));
...
Run Code Online (Sandbox Code Playgroud)

在localhost上一切正常,但在heroku上我似乎无法设置安全cookie.我究竟做错了什么?该文档称,负载平衡器终止SSL,它说的是配置在那里?
非常感谢

hle*_*lev 15

问题是我设置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
    }
}));
...
Run Code Online (Sandbox Code Playgroud)

app.enable('trust proxy');如果您想req.protocol在Heroku托管应用中的某个地方使用,请添加@friism建议.


fri*_*ism 11

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

Heroku X-Forwarded-Proto使用原始协议设置标头.我没有对此进行测试,但根据文档,您必须通过设置此处trust proxy记录的方式告诉express尊重该标头中的信息.这里有其他详细信息.req.protocol