ruby-on-rails - Rails 5.0.0beta3:开发中的 ActionController::InvalidAuthenticityToken

标签 ruby-on-rails csrf-protection actioncontroller ruby-on-rails-5

我刚刚在 Rails 5.0.0beta3 上启动了一个带有几个表单的简单应用程序。

在开发中,使用 http://localhost:3000在 Safari 或 Chrome 上访问该应用程序,如果我填写表单并提交,我总是收到 ActionController::InvalidAuthenticityToken错误。
但是,如果我在填写和提交之前重新加载页面,那么它工作正常。

该应用程序使用默认值:

  • protect_from_forgery with: :exception在应用程序 Controller 中,
  • <%= csrf_meta_tags %>在通过应用程序布局的 html 标题中,
  • Rails 创建的开发环境。

  • 例子:
    <%= form_for @node, url: admin_book_nodes_url, as: :node do |form| %>
      <%= render "form", f: form %>
      <p><%= form.submit %> or <%= link_to "Cancel", admin_book_nodes_path %></p>
    <% end %>
    

    日志:
    Started POST "/admin/book/nodes" for ::1 at 2016-03-20 11:54:31 +0000
    Processing by Admin::Book::NodesController#create as HTML
      Parameters: {"utf8"=>"✓", "authenticity_token"=>"/G5pF6hSPx0Vf21Fi0FCh+VlOcHY4w8C5lmHmwr3NQRjfXUP9/xboybeV3tevmyTyHcwSX8LplU/HgZVGDbGlw==", "node"=>{"parent_id"=>"1", "position"=>"1", "title"=>"lkjlkj", "description"=>"lkjlj", "published"=>"0", "content"=>"lkjlkj"}, "commit"=>"Create node"}
    Can't verify CSRF token authenticity
    Completed 422 Unprocessable Entity in 1ms (ActiveRecord: 0.0ms)
    

    如果我在 Controller ( self.per_form_csrf_tokens = false )中禁用 per form CSRF token ,它工作正常,所以我的问题确实在那个级别。

    session 似乎没有在任何时候重置。

    有趣的是,当表单第一次加载时,header 的menage 标签中的真实性标记与表单中的标记不同。元标记也位于标题标记的底部。
    当我重新加载元标记和表单中的标记时,元标记是相同的,并且元标记位于标题标记的顶部。

    更新:

    我认为问题归结于 Turbolinks。

    当从应用程序中的另一个页面访问表单页面时,Turbolinks 会触发 XHR 请求,我遇到了这个问题。

    但是,当我重新加载页面时,浏览器会重新加载它,但我没有看到问题。

    最佳答案

    我在 Rails 上提出了一个问题。

    经过进一步调查,问题似乎是由选项 :url 引起的。在 form_for .

    见:Issue #24257 (还没解决)

    关于ruby-on-rails - Rails 5.0.0beta3:开发中的 ActionController::InvalidAuthenticityToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36112939/

    相关文章:

    security - 在 ASP.NET Web API 中,如何防止来自没有 cookie 的客户端的 CSRF 攻击?

    ruby-on-rails - 指定格式 : "xml" ignored with render_to_string

    ruby-on-rails - 使用 Authlogic 进行 Facebook Cucumber 测试 - 如何测试用户以 Facebook 用户身份登录?

    ruby-on-rails - 在 `require' : no such file to load -- iconv (LoadError)

    ruby-on-rails - Carrierwave 与 Dropzone JS。是否可以将它们与嵌套属性一起使用?

    csrf - javax.servlet.ServletException : Possible CSRF attack. 请参阅 header :

    ruby-on-rails - Rspec Controller 测试因撇号字符失败?

    php - Laravel 4.1 _token 表单提交错误

    ruby-on-rails-3 - 调用 expire_fragment 引发 "to use #url_for, you must include routing helpers explicitly"错误