Rails 3 CSRF_meta_tag无法正常运行

时间:2011-08-23 23:56:05

标签: ruby-on-rails-3 rails-3-upgrade

我正在将我的应用程序从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,或者我只是遗漏了什么?

1 个答案:

答案 0 :(得分:6)

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

jquery-ujs gem(jquery-rails)应该为您解决这个问题。您使用的版本可能存在一些错误。 (我确实记得3.0.x中存在相关的错误,但无法回想起确切的问题)。尝试更新jquery-ujs并重新生成jquery(rails generate jquery:install),删除rails.js以查看问题是否已修复。

Bonus note:从rails 3.1开始,csrf_meta_tag已重命名为csrf_meta_tags,但仍可使用前一个。

请参阅github上的jquery-ujs