Ruby on rails 根据外部源发布URL设计会话重置

Ruby on rails 根据外部源发布URL设计会话重置,ruby-on-rails,actionscript-3,flash,authentication,devise,Ruby On Rails,Actionscript 3,Flash,Authentication,Devise,这是一个有趣的问题,真的,因为所有你设计的东西都在那里 我们已经设计了OmniAuth设置,但是无论您是通过Facebook登录,还是通过普通用户名登录,问题都会发生。我们的网站上嵌入了一个Flash游戏。完成游戏后,游戏将向Rails后端提交您的分数: request = new URLRequest("http://mydomain.com:2012/games/1/leaderboards/13/submitLeaderboardStatistic"); request.method =

这是一个有趣的问题,真的,因为所有你设计的东西都在那里

我们已经设计了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被发送到我们的URL。控制器(排行榜嵌套在游戏下方)在SubmitleReaderBoardStatistic方法中获取url信息。这种方法处理信息。在这个方法中,我调用
current_user
来获取当前用户,即提交实际分数的用户。问题是,当前用户返回nil

显然,一旦游戏启动了URL POST请求,Desive就会使会话无效(或其他),所以我无法告诉是谁提交了分数

为什么当前登录用户在Flash游戏发送URL后被“踢出”?我如何解决这个问题,这样我就可以说“用户XXX提交了这个分数。”

谢谢大家!

轨道:3.2.2
Ruby:1.9.2

设计:1.5.3

尝试将完整URL地址设置为“/games/1/排行榜/13/submitLeaderboardStatistic”。原因可能是跨域策略,当您使用POST方法到不同的域时,应该从服务器接收该策略。

您提交的表单是否具有有效的CSRF令牌?我认为如果csrf令牌无效或不存在,Desive会调用reset_会话。

出于安全原因,我没有在堆栈溢出时发布完整的URL(出于您所说的原因)。URL的格式为“”。我更新了OP以反映这一点。谢谢你的发帖!这就是原因(我不久前发现的)。POST请求没有/没有/具有有效的CSRF令牌,因此它正在重置会话。我最终将CSRF令牌传递到flash应用程序中,它在发送请求时使用它。这是正确的答案。