【问题标题】:Rails 3 CSRF_meta_tag not functioningRails 3 CSRF_meta_tag 不起作用
【发布时间】:2011-08-23 23:56:04
【问题描述】:

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

在我的布局中,我做到了。不幸的是,当我使用 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 是正常的,还是我只是遗漏了什么?

【问题讨论】:

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


    【解决方案1】:

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

    jquery-ujs gem (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

    【讨论】:

    • 对不起,我有点困惑:我找不到任何 jquery-ujs gem(将它添加到我的 Gemfile 并且找不到它,运行 rails generate query:install 说它可以' t 找到生成器查询:安装)。它带有导轨吗?什么是 Jquery-urj?
    • 我的错。它被称为 jquery-ujs,但 gem 名称是 jquery-rails。见github.com/rails/jquery-ujs。请遵循其自述文件。 jquery-urj 是一个错字我要更新答案。
    • 另一个错字是generate命令真的是“rails generate jquery:install”
    • 好吧,尝试编辑 jquery:install 但被拒绝,希望人们在复制粘贴之前注意 cmets。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 2011-09-02
    相关资源
    最近更新 更多