пропустить перед фильтром, когда ключ api присутствует


Я пытаюсь построить api для моего приложения rails.

Я хочу, чтобы пропустить CSRF-атаку, прежде чем фильтр, когда действительный api_key присутствует в GET-запросах.

Я пробовал (я проверю api_key, как только смогу заставить условный фильтр работать)

(skip_before_filter :verify_authenticity_token) if params[:api_key].present?

Но это не работает ...

Есть идеи?

4   6   2012-05-15 23:58:55

4 ответа:

Я не думаю, что это может сработать, потому что если выражение вычисляется во время создания класса контроллера, то params[:api_key].present? ложно в этот момент... вы можете попробовать

skip_before_filter :verify_authenticity_token, :if =>lambda{ params[:api_key].present?}

Рельсы 3.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 условным. Вы не можете использовать 'if' на skip_before_filter.

Попробуйте это

skip_before_filter :verify_authenticity_token, :except => [], if params[:api_key].present?