Rails4でトークン認証のアクションに対してCSRFを無効にする

Railsはprotect_from_forgeryって書くだけでCSRF対策が有効になってマジ便利なわけだけど、セッションで認証するんじゃなくてiOSから呼ぶAPIとかでトークン使って認証する場合はCSRFの対策いらないので無効にしたい。

その場合は

protect_from_forgery with: :null_session

ってすればいいらしい。これはCSRF Tokenが一致しなかった場合に例外を投げるんじゃなくてセッションを空にするという動作になる。

ちなみにprotect_from_forgeryのデフォルトは:null_sessionなので

protect_from_forgery

でもよさそう(Rails 4.0.0現在)

ただし最初は以下のようになってるので明示的に変更する必要はある。

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception
end