14

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
        }
}));
...

ローカルホストではすべてが正常に機能しますが、herokuでは安全なCookieを設定できないようです。私は何が間違っているのですか?ドキュメントによると、ロードバランサーはSSLを終了しますが、そこで構成するものですか?
どうもありがとう

4

3 に答える 3

17

解決

問題は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
    }
}));
...

Herokuでホストされているアプリのどこかでapp.enable('trust proxy');使用したい場合に備えて、@friismによって提案されたものも追加してください。req.protocol

于 2013-01-23T06:15:14.167 に答える
15

HerokuがSSLをアプリに到達する前に終了するのは正しいことです。これにより、expressは非SSLトラフィックを認識します。そのため、Herokuで実行しているときにCookieの設定を拒否している可能性があります。

HerokuはX-Forwarded-Proto、元のプロトコルでヘッダーを設定します。私はこれをテストしていませんが、ドキュメントによると、ここtrust proxyにドキュメント化されているように設定することにより、そのヘッダーの情報を尊重するようにexpressに指示する必要があります。詳細については、こちらをご覧くださいreq.protocol

于 2013-01-22T17:59:19.747 に答える
1

cookie-sessionを使用している場合は、次のようになります。

app.use require('cookie-session') 
   secret: '<secret>'
   secureProxy: true
于 2014-10-06T22:29:34.573 に答える