2012-03-24 12 views
2

興味深い問題です。外部ソースの投稿時にセッションをリセットするURL

私たちはOmniAuthでDeviseセットアップを行っていますが、Facebook経由でログインしている場合でも、通常のユーザー名でログインしている場合でも問題は発生します。私たちのウェブサイトに埋め込まれたFlashゲームがあるとどうなりますか?あなたがゲームをプレイし終わったら、ゲームはRailsのバックエンドにあなたのスコアを提出する:

request = new URLRequest("http://mydomain.com:2012/games/1/leaderboards/13/submitLeaderboardStatistic"); 
request.method = URLRequestMethod.POST; 

var loader : URLLoader = new URLLoader(); 
loader.dataFormat = URLLoaderDataFormat.VARIABLES; 
var variables : URLVariables = new URLVariables(); 
variables.game_value = aScore; 
variables.game_id = 1; 
variables.unique_identifier = "com.onecoolgameaday.highscores"; 
variables.time_stamp = new Date(); 

request.data = variables; 

loader.addEventListener(Event.COMPLETE, on_complete); 
loader.addEventListener(IOErrorEvent.IO_ERROR, onIOError); 
loader.load(request); 

URLは、当社のURLに送信されます。コントローラー(リーダーボードはゲームの下にネストされています)は、submitLeaderboardStatisticメソッドでURL情報を取得します。このメソッドは、情報を処理します。この方法では、current_userに電話をかけて、実際のスコアを提出したユーザーを取得します。問題は、current_userはnilを返します。

明らかに何が起きているのですかゲームが始まったときそのURLのPOST要求を出し、deviseがセッション(または何か)を無効にするので、誰がスコアを提出したかわかりません。

FlashゲームがURLを送信すると、現在サインインしているユーザーが「キックオフ」になっているのはなぜですか?これを修正するにはどうすればいいですか?「ユーザーXXXがこのスコアを送信しました」と言うことができます。

ありがとうございました!

のRails:3.2.2
ルビー:1.9.2
工夫:1.5.3

答えて

1

提出するフォームに有効なCSRFトークンがありますか?私はcsrfトークンが無効か存在しない場合、Deviseがreset_sessionを呼び出すと思います。

+0

これは実際に原因です(私は少し前に見つけました)。 POSTリクエストは有効なCSRFトークンを持っていたので、セッションをリセットしていました。私はCSRFトークンをフラッシュアプ​​リケーションに渡してしまい、リクエストを送信するときにそれを使用します。これは正解です。 –

0

は "/ゲーム/ 1 /リーダーボード/ 13/submitLeaderboardStatistic" に完全なURLアドレスを設定してください。おそらく理由はクロスドメインポリシーです。これはPOSTメソッドを別のドメインに使用するときにサーバーから受信する必要があります。

+0

セキュリティ上の理由から、私はStack Overflow(あなたが言う理由で)の完全なURLを投稿しませんでした。 URLの形式は「http://mydomain.com:2012/games/1/leaderboards/13/submitLeaderboardStatistic」です。これを反映するようにOPを更新しました。投稿ありがとう! –

関連する問題