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