Ruby on rails 3 回形针gem触发CSRF令牌验证问题

Ruby on rails 3 回形针gem触发CSRF令牌验证问题,ruby-on-rails-3,ruby-on-rails-3.1,paperclip,csrf,Ruby On Rails 3,Ruby On Rails 3.1,Paperclip,Csrf,我有一个Rails 3.1应用程序,它使用了回形针gem(v3.4.0)。简而言之我有一个故事模型和一个帖子模型。一个故事可以有很多帖子 #story.rb class Story < ActiveRecord::Base attr_accessible :title, :user_id, :username, :posts_attributes belongs_to :user has_many :posts, :dependent => :d

我有一个Rails 3.1应用程序,它使用了回形针gem(v3.4.0)。简而言之我有一个故事模型和一个帖子模型。一个故事可以有很多帖子

#story.rb

class Story < ActiveRecord::Base

  attr_accessible :title, :user_id, :username, :posts_attributes

  belongs_to    :user
  has_many      :posts, :dependent  =>  :destroy,
                      :order => "created_at DESC"

  accepts_nested_attributes_for :posts, :reject_if => lambda { |t| t['contents'].nil? }

end
结果,我的会话数据被破坏,我甚至看不到Firebug的请求头。put请求根本不出现在firebug中

现在,毫不奇怪,我可以通过PostController中的以下内容解决此问题:

skip_before_filter :verify_authenticity_token, :only => [:create]
但我不想放弃这种安全感。我还尝试通过js/jquery将CSRF头添加到我的表单中:

jQuery.ajaxSetup({ 
  beforeSend: function(xhr) {
    xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-          
            token"]').attr('content'));
  }
});
但这并不能解决问题,正如我上面所说的,我甚至无法看到请求头数据来查看头

有谁能想出回形针引发问题的原因吗

$.ajaxSetup({
    beforeSend: function(xhr) {
        xhr.setRequestHeader('X-CSRF-Token',
                             $('meta[name="csrf-token"]').attr('content'));
    }
});
在js中

在布局中

<%= csrf_meta_tags %>

文件应足以使其工作


否则,您可以使用处理CSRF令牌的
jquery rails
gem

我知道我第一次发布上述问题已经有一段时间了,但人们仍然在搜索中找到它,所以我想我应该用一个答案更新内容

我上面讨论的问题与回形针无关。提交表单时未使用csrf令牌,因为我正在使用remotipart.js处理包含文件附件的表单的提交。Remotipart通过将表单数据复制到一个i-frame中来实现类似ajax的表单提交,然后在站点保持活动状态时进行正常(即非ajax)提交。有关通过i-frame上传ajax文件的更详细说明,请参阅


在以前版本的remotipart中,csrf令牌没有复制到i-frame提交的表单中。支持RemotipPart的好人现在已经修复了这个缺点。您可以找到修复程序,这就是解决问题所需的:

大多数情况下,您只需要在布局中—在部分中。
$.ajaxSetup({
    beforeSend: function(xhr) {
        xhr.setRequestHeader('X-CSRF-Token',
                             $('meta[name="csrf-token"]').attr('content'));
    }
});
<%= csrf_meta_tags %>