3

我正在将我的应用程序从 Rails 2.3 升级到 Rails 3。我读到我需要插入

<%= csrf_meta_tag %>

在我的布局中,我做到了。不幸的是,当我使用 ajax 请求时,我一直被注销。经过一番研究,我发现一种较旧的方法是添加

$j(document).ajaxSend(function(e, xhr, options) {
  var token =$j("meta[name='csrf-token']").attr("content");
  xhr.setRequestHeader("X-CSRF-Token", token);  
});

在我的 application.js 文件中。它现在可以正常工作(看来我实际上不需要 csrf_meta_tag)。

我必须在我的 application.js 中添加这 4 行代码而不仅仅是 csrf_meta_tag 是正常的,还是我只是遗漏了什么?

4

1 回答 1

6

首先,您确实需要 csrf_meta_tag。如果您不在布局中使用它,则不会生成csrf-token元数据,那么您的 application.js 修复程序将停止工作。

jquery-ujsgem (jquery-rails) 应该会为您解决这个问题。您使用的版本可能有一些错误。(我记得 3.0.x 中有一个相关的错误,但不记得确切的问题)。尝试更新 jquery-ujs 并重新生成 jquery ( rails generate jquery:install),删除 rails.js 以查看问题是否得到解决。

额外说明:从 rails 3.1 开始,csrf_meta_tag 已重命名为 csrf_meta_tags,但仍可以使用前一个。

请参阅github 上的 jquery-ujs 。

于 2011-08-24T00:14:12.200 回答