一尘不染

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

node.js

我有一个运行在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
        }
}));
...

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


阅读 219

收藏
2020-07-07

共1个答案

一尘不染

您认为Heroku在到达您的应用之前会先终止SSL。这导致express看到非SSL流量,这可能就是为什么在Heroku上运行时拒绝设置cookie的原因。

Heroku X-Forwarded-Proto使用原始协议设置标头。我尚未对此进行测试,但是根据文档,您必须通过trust proxy此处所述设置告诉Express尊重该标头中的信息。其他详细信息请参见req.protocol
此处

2020-07-07