2012-05-15 4 views
6

Я пытаюсь создать api для моего приложения rails.skip_before_filter, когда присутствует api_key

Я хочу пропустить csrf перед фильтром, когда действительная api_key присутствует в запросах, не связанных с получением.

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

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

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

Есть идеи?

+0

Почему контроллеры API наследуют от ApplicationController? – apneadiving

+0

Я пытался помешать себе создать два набора контроллеров, чтобы сделать то же самое. – Cyrus

ответ

6

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

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

+0

Я попробую. – Cyrus

+0

Это кажется действительно многообещающим, но оно не работает. 'skip_before_filter: verify_authenticity_token' работает без условного выражения, которое является странным. – Cyrus

+0

ihave checked skip_before_filter: verify_authenticity_token,: if => lambda {params [: api_key] .present?} И кажется, что он работает, если вставлен после защиты_from_forgery –

-2

попробовать этот

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

Я пробовал это, и он не работал :( – Cyrus

-1

Невозможно сделать skip_before_filter условным. Вы не можете использовать 'if' на skip_before_filter.

0

Rails 3.2.13 -

Ни одно из вышеперечисленных решений не работал (может быть, я делаю что-то не так?), Но это сделал:

skip_before_filter :verify_authenticity_token, :if => :check_auth 
def check_auth 
    request.headers["authentication_token"] == ENV['AUTH_KEY'] 
end 
Смежные вопросы