Ruby Can';t通过Ajax将表单发布到不同的子域(警告:无法验证CSRF令牌的真实性)

Ruby Can';t通过Ajax将表单发布到不同的子域(警告:无法验证CSRF令牌的真实性),ruby,jquery,ruby-on-rails-3.1,cross-domain,cross-domain-policy,Ruby,Jquery,Ruby On Rails 3.1,Cross Domain,Cross Domain Policy,我试图将一个远程表单发送到一个与表单(domain.com)不同的子域(例如.domain.com),但我不断收到警告警告:无法验证日志中的CSRF令牌真实性,chrome中的inspector告诉我请求的状态为(已取消),类型为application/x-www-form-urlencoded 表格如下: 按钮\u“跟随”,跟随用户\u url(子域:post.user\u username\u slug),远程:true 当我移除遥控器:true时,我得到了我想要的结果。另外,当一个用户尝试

我试图将一个远程表单发送到一个与表单(domain.com)不同的子域(例如.domain.com),但我不断收到警告
警告:无法验证日志中的CSRF令牌真实性,chrome中的inspector告诉我请求的状态为
(已取消)
,类型为
application/x-www-form-urlencoded

表格如下:
按钮\u“跟随”,跟随用户\u url(子域:post.user\u username\u slug),远程:true

当我移除
遥控器:true
时,我得到了我想要的结果。另外,当一个用户尝试在操作的同一子域(example.domain.com)中使用相同的表单时,我得到了正确的结果

我找到了在所有子域中共享cookie的方法(
session\u store.rb
中的
domain::all
),但我找不到在Ajax请求中共享令牌的方法

我使用的是Rails 3.1.3、Ruby 1.9.3和jQuery 1.7.1

有人能帮我吗

编辑:


这个问题似乎与我有关。现在,我正试图找到一个最小摩擦的解决方案,使这个(异步)跨子域请求能够工作。

在您的POST参数中,包括字段“authenticity\u token”,以及助手*form\u authenticity\u token*返回的值。(这与饼干无关)

编辑我认为您遇到了同源策略,该策略阻止来自域A的javascript与域B通信(也适用于子域)。这个名为CORS的域有一个“覆盖”,您与之交谈的域必须实现这个“覆盖”


因此,假设您对域A和域B都有控制权,您可以绕过此限制。这解释了为什么“正常”请求工作,而“:remote=>true”请求不工作。(CSRF令牌错误可能不准确。)(在我的示例中是域B)。

您可以将两个控制器中的真实性令牌设置为相同

我想是的

保护\u不受\u伪造者的影响:secret=>'long\u secret\u string'


如果两个控制器使用相同的令牌,您应该能够跨子域或其他站点发布。您确实打开了一些跨站点脚本漏洞,尽管查看页面的源代码,已经为
按钮生成了一个authenticity标记字段<代码>
我认为您的身份验证令牌没有问题,是一个不准确的错误。有证据表明,这是一项违反同一原产地政策的行为。查看我的编辑。我将阅读帖子并返回结果。现在谢谢你。我已经阅读了这篇文章并理解了它的局限性。我只是不知道如何实现这个问题的最小摩擦解决方案。我需要经常使用不同的控制器跨子域请求。我建议将这两种cors方法放入您的应用程序控制器中。然后,您可以将过滤器添加到特定控制器;这样就不应该有太多的重复。至于你的路线,我不确定是否有办法创建一个通用的“选项”路线。可能是一些好的建议在或