モバイルからのリクエストのCSRF検証をスキップする

以前書いた内容が動かなかったので、再投稿。

gem 'which_browser'
class ApplicationController < ActionController::Base
  protect_from_forgery

  protected

  # Override
  def verified_request?
    request.mobile? || super
  end
end
  • protect_from_forgery内ではCSRF検証を行うアクションverify_authenticity_tokenをfilterにはさんでる。
  • そのアクションの中で実際にCSRF検証を行う条件として使われているメソッドがverified_request?
  • というわけで、こいつをオーバーライドしてあげればCSRF検証の条件を追加することができる。

追記

which_browserをフォークしてtitaniumのiOSシミュレータからのリクエストにも対応させた。

gem 'which_browser', :git => 'git://github.com/naoty/which_browser.git', :branch => 'titanium_prototype'
class ApplicationController < ActionController::Base
  protect_from_forgery

  protected

  # Override
  def verified_request?
    request.ti_iphone? || super
  end
end