興味深い問題です。外部ソースの投稿時にセッションをリセットする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
これは実際に原因です(私は少し前に見つけました)。 POSTリクエストは有効なCSRFトークンを持っていたので、セッションをリセットしていました。私はCSRFトークンをフラッシュアプリケーションに渡してしまい、リクエストを送信するときにそれを使用します。これは正解です。 –