這是一個有趣的問題,真的,所有你設計師在那裏。在外部來源設計會話重置發佈URL
我們使用OmniAuth設計了設置,但無論您是通過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發送到我們的網址。控制器(排行榜嵌套在Games下)獲取submitLeaderboardStatistic方法中的URL信息。這種方法處理信息。在此方法中,我撥打current_user
以獲得當前用戶,即提交實際分數的人。問題是,current_user返回nil。
顯然,發生了什麼,一旦遊戲啓動該URL POST請求,設計使會話(或某物)無效,所以我不能分辨誰提交了分數。
爲什麼當Flash遊戲發送URL後,當前登錄的用戶被「踢開」?我如何解決這個問題,我可以說「用戶XXX提交了這個分數」。
謝謝!
的Rails 3.2.2
紅寶石:1.9.2
設計:1.5.3
這其實是一個原因(我剛纔發現)。 POST請求沒有/有一個有效的CSRF令牌,所以它重置會話。我最終將CSRF令牌傳入閃存應用程序,並在發送請求時使用它。這是正確的答案。 – 2012-04-24 02:08:43