Railsアプリケーション用のAPIを構築しようとしています。
有効なapi_keyが非getリクエストに存在する場合、フィルターの前にcsrfをスキップしたいと思います。
試しました(条件付きフィルターが機能するようになったら、api_keyを検証します)
(skip_before_filter :verify_authenticity_token) if params[:api_key].present?
しかし、それは機能しません...
何か案は?
Railsアプリケーション用のAPIを構築しようとしています。
有効なapi_keyが非getリクエストに存在する場合、フィルターの前にcsrfをスキップしたいと思います。
試しました(条件付きフィルターが機能するようになったら、api_keyを検証します)
(skip_before_filter :verify_authenticity_token) if params[:api_key].present?
しかし、それは機能しません...
何か案は?
コントローラクラスの作成中に式が評価される場合、params[:api_key].present?
その時点ではfalseであるため、これは機能しないと思います...uは試すことができます
skip_before_filter :verify_authenticity_token, :if =>lambda{ params[:api_key].present?}
Rails3.2.13-
上記の解決策はどれも機能しませんでした(多分私は何か間違ったことをしていましたか?)が、これは機能しました:
skip_before_filter :verify_authenticity_token, :if => :check_auth
def check_auth
request.headers["authentication_token"] == ENV['AUTH_KEY']
end
skip_before_filterを条件付きにする方法はありません。skip_before_filterで「if」を使用することはできません。
これを試して
skip_before_filter :verify_authenticity_token, :except => [], if params[:api_key].present?