覆盖request.forgery白名单?

时间:2011-07-01 08:22:01

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

当我的一个Rails控制器中调用某个方法时,我想检查用户的IP地址是否在可信列表中,如果是,则覆盖request.forgery_whitelisted?方法为true,以便不强制执行CSRF保护。

我读过的博客文章似乎暗示在控制器操作中声明以下内容会实现此目的,但它仍然会引发CSRF保护错误。

if request.remote_ip = "127.0.0.1"
 def request.forgery_whitelisted?; true; end
end

是否还有其他地方需要及早覆盖方法以使其生效?

1 个答案:

答案 0 :(得分:1)

以下任何一种都应该有效:

    ApplicationLtroller中的
  • override / monkey-patch'verify_authenticity_token'方法:

def verify_authenticity_token
  super unless request.remote_ip = '127.0.0.1' # TODO: replace this with actual white-listing logic
end
  • monkey-patch'forgery_whitelisted?'方法:

module ActionDispatch
  class Request
    def forgery_whitelisted?
      super if remote_ip == '127.0.0.1' # TODO: replace this with actual white-listing logic
    end
  end
end