gpt4 book ai didi

ruby-on-rails-3 - 回形针 gem 触发 CSRF token 验证问题

转载 作者:行者123 更新时间:2023-12-04 02:28:21 26 4
gpt4 key购买 nike

我有一个使用回形针 gem (v 3.4.0) 的 Rails 3.1 应用程序。简而言之。我有一个故事模型和一个后期模型。一个故事可以有很多帖子。

#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
#post.rb

class Post < ActiveRecord::Base

attr_accessible :contents, :photo, :dimensions

belongs_to :story, :touch => true
belongs_to :user, :touch => true

has_attached_file :photo,
:styles => {
:medium => { :geometry => "400x400>" },
:thumb => { :geometry => "100x100>" },
},
:processors => [:thumbnail],
:storage => :s3,
:s3_credentials => "#{Rails.root.to_s}/config/s3.yml",
:path => "/:style/:id/:filename"


before_save :extract_dimensions

serialize :dimensions

validates :contents, :presence => true,
:length => { :maximum => 399,
:minimum => 5 }
validates :user_id, :presence => true

validates_attachment_content_type :photo,
:content_type => ['image/jpeg', 'image/png', 'image/gif', 'image/jpg'],
:message => "Sorry, we don't support that type of image format"

end

如您所见,帖子可能带有照片附件。我使用回形针来管理这些附件。

我生成了使用 javascript/jquery 在客户端上动态发布这些帖子的表单。我的问题是这个。 . .如果帖子不包含照片附件,则一切正常。但是,如果帖子有照片附件,我会收到以下错误消息并且帖子没有发布:
WARNING: Can't verify CSRF token authenticity
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = 61 LIMIT 1
(0.3ms) BEGIN
(0.2ms) COMMIT
Completed 401 Unauthorized in 238ms

结果,我的 session 数据被破坏了,我什至看不到 Firebug 的请求 header 。放置请求根本不会出现在 Firebug 中。

现在,毫不奇怪,我可以通过 PostController 中的以下内容解决这个问题:
skip_before_filter :verify_authenticity_token, :only => [:create]

但我不想放弃这种安全感。我还尝试通过 js/jquery 将 CSRF header 添加到我的表单中:
jQuery.ajaxSetup({ 
beforeSend: function(xhr) {
xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-
token"]').attr('content'));
}
});

但这并不能解决问题,而且正如我上面所说的,我什至看不到请求头数据来查看头。

任何人都可以想出回形针引发问题的原因吗?

最佳答案

我知道自从我第一次发布上述问题以来已经有一段时间了,但人们仍然在他们的搜索中找到它,所以我想我会用答案来更新。

我上面讨论的问题与Paperclip无关。提交表单时没有使用 csrf token ,因为我使用 remotipart.js 来处理具有文件附件的表单的提交。 Remotipart 通过将表单数据复制到 i-frame 中来启用类似 ajax 的表单提交,然后在您的站点保持事件状态时进行正常(即非 ajax)提交。见 this article有关通过 i-frame 上传 ajax 文件的更详细说明。

在之前版本的 remotipart 中,csrf token 没有复制到 i-frame 提交的表单中。支持remotipart的好人现在已经解决了这个缺点。您可以找到修复 here

关于ruby-on-rails-3 - 回形针 gem 触发 CSRF token 验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15261169/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com