这是一个有趣的问题,真的,所有你设计师在那里。在外部来源设计会话重置发布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