1

を使用して単純な FacebookCanvasスタイルのアプリを構築していSinatraます。

自分のマシンでローカルに実行すると、アプリは正常に動作します。しかし、それを押し上げるとHeroku、セッションが一致しないという問題が発生し、ページのリロードが行われたときに /callback によってセッションに配置されたデータが存在しません。

問題は、 で実行しているときにHeroku、ファンシーな負荷分散が挿入されるため、ページのリロードと、ユーザーの ID がセッションに保存されるrequest.env['REMOTE_HOST']Facebook との間で が異なるようです。callback

いくつかの (編集された) ロギングは、これを明確に示しています。

Heroku の場合 (リモート ホストが異なるため、セッション ID が異なることに注意してください)

X9.1XX.XX1.XX - - [23/Aug/2012 03:27:42] "POST / HTTP/1.1" 200 1878 0.0235
DEBUG -- : ---------------------------------------------------------
DEBUG -- : ---------------------------------------------------------
DEBUG -- : Handling request from host ip-10-92-97-233.ec2.internal
DEBUG -- : Session ID: 39960b607fd7c1150791d4d42d6633b3b2a5b18e79e742f67d8f677f139dbca8
DEBUG -- : ---------------------------------------------------------
DEBUG -- : Set session['oauth'] : Koala::Facebook::OAuth
DEBUG -- : Session id: 39960b607fd7c1150791d4d42d6633b3b2a5b18e79e742f67d8f677f139dbca8
DEBUG -- : ---------------------------------------------------------
DEBUG -- : Session ID: 39960b607fd7c1150791d4d42d6633b3b2a5b18e79e742f67d8f677f139dbca8
DEBUG -- : Completed request from host ip-10-92-97-233.ec2.internal
DEBUG -- : ---------------------------------------------------------
DEBUG -- : ---------------------------------------------------------

X9.1XX.XX1.XX - - [23/Aug/2012 03:27:46] "GET /login HTTP/1.1" 302 - 0.0178
DEBUG -- : ---------------------------------------------------------
DEBUG -- : ---------------------------------------------------------
DEBUG -- : Handling request from host ip-10-94-82-253.ec2.internal
DEBUG -- : Session ID: 20200e42add5ec9bfe12b225502c7449dda6e8ab06dd3fbe204239db0e21de89
DEBUG -- : ---------------------------------------------------------
ERROR -- : Could not find oauth key in session 20200e42add5ec9bfe12b225502c7449dda6e8ab06dd3fbe204239db0e21de89
DEBUG -- : ---------------------------------------------------------
DEBUG -- : Session ID: 20200e42add5ec9bfe12b225502c7449dda6e8ab06dd3fbe204239db0e21de89
DEBUG -- : Completed request from host ip-10-94-82-253.ec2.internal
DEBUG -- : ---------------------------------------------------------
DEBUG -- : ---------------------------------------------------------

X9.1XX.XX1.XX - - [23/Aug/2012 03:27:48] "GET /callback?code=AQCs… …vxkEI76cq32juk HTTP/1.1" 302 - 0.0014
DEBUG -- : ---------------------------------------------------------
DEBUG -- : ---------------------------------------------------------
DEBUG -- : Handling request from host ip-10-125-37-231.ec2.internal
DEBUG -- : Session ID: a94f5f36b44e5891657982248d1304e265f9619bdcdc37b648879e5a12a0fe5b
DEBUG -- : ---------------------------------------------------------
DEBUG -- : ---------------------------------------------------------
DEBUG -- : Session ID: a94f5f36b44e5891657982248d1304e265f9619bdcdc37b648879e5a12a0fe5b
DEBUG -- : Completed request from host ip-10-125-37-231.ec2.internal
DEBUG -- : ---------------------------------------------------------
DEBUG -- : ---------------------------------------------------------

ローカル (これは機能します。同じホストと一致するセッション ID に注意してください)

X9.1XX.XX1.XX - - [23/Aug/2012 13:56:22] "POST / HTTP/1.1" 200 1878 0.0279
DEBUG -- : ---------------------------------------------------------
DEBUG -- : ---------------------------------------------------------
DEBUG -- : Handling request from host ppp12345.static.someprovider.net
DEBUG -- : Session ID: 892e6ec515afde6f463102f83d373523bba62b26180a2e5a34a4945c787eacfd
DEBUG -- : ---------------------------------------------------------
DEBUG -- : Set session['oauth'] : Koala::Facebook::OAuth
DEBUG -- : Session id: 892e6ec515afde6f463102f83d373523bba62b26180a2e5a34a4945c787eacfd
DEBUG -- : ---------------------------------------------------------
DEBUG -- : Session ID: 892e6ec515afde6f463102f83d373523bba62b26180a2e5a34a4945c787eacfd
DEBUG -- : Completed request from host ppp12345.static.someprovider.net
DEBUG -- : ---------------------------------------------------------
DEBUG -- : ---------------------------------------------------------

X9.1XX.XX1.XX - - [23/Aug/2012 13:56:31] "GET /login HTTP/1.1" 302 - 0.0079
DEBUG -- : ---------------------------------------------------------
DEBUG -- : ---------------------------------------------------------
DEBUG -- : Handling request from host ppp12345.static.someprovider.net
DEBUG -- : Session ID: 892e6ec515afde6f463102f83d373523bba62b26180a2e5a34a4945c787eacfd
DEBUG -- : ---------------------------------------------------------
DEBUG -- : ---------------------------------------------------------
DEBUG -- : Session ID: 892e6ec515afde6f463102f83d373523bba62b26180a2e5a34a4945c787eacfd
DEBUG -- : Completed request from host ppp12345.static.someprovider.net
DEBUG -- : ---------------------------------------------------------
DEBUG -- : ---------------------------------------------------------

X9.1XX.XX1.XX - - [23/Aug/2012 13:56:34] "GET /callback?code=AQCs… …vxkEshwXTPMC8lnaY9FU HTTP/1.1" 302 - 1.4674
DEBUG -- : ---------------------------------------------------------
DEBUG -- : ---------------------------------------------------------
DEBUG -- : Handling request from host ppp12345.static.someprovider.net
DEBUG -- : Session ID: 892e6ec515afde6f463102f83d373523bba62b26180a2e5a34a4945c787eacfd
DEBUG -- : ---------------------------------------------------------
DEBUG -- : {"username"=>"davesag", "verified"=>true, "updated_time"=>"2012-08-20T23:41:41+0000"}
DEBUG -- : ---------------------------------------------------------
DEBUG -- : Session ID: 892e6ec515afde6f463102f83d373523bba62b26180a2e5a34a4945c787eacfd
DEBUG -- : Completed request from host ppp12345.static.someprovider.net
DEBUG -- : ---------------------------------------------------------
DEBUG -- : ---------------------------------------------------------

問題は、Heroku にセッションを統合して Cookie が適切に移動し、一致するように指示するにはどうすればよいかということです。

4

1 に答える 1

0

REMOTE_HOST に基づいてディスパッチするのではなく、セッション cookie を使用してセッション ID を保存する必要があります。REMOTE_HOST は、ご覧のとおり、heroku のルーティングに基づいて異なりますが、複数の人が同じ発信 IP アドレスを使用している場合にも異なります。

于 2012-08-23T15:23:56.280 に答える