2013-02-23 10 views
48

Я сейчас разрабатываю веб-интерфейс API с Ruby on Rails. Когда приложение Rails получает запрос POST без какого-либо токена csrf, должно появиться следующее сообщение об ошибке. Потому что приложение не имеет просмотров.ВНИМАНИЕ: Невозможно подтвердить подлинность CSRF-маркера в случае разработки API

WARNING: Can't verify CSRF token authenticity 

Итак, мой вопрос в том, как я могу избежать проверки маркера csrf в этом случае?

Благодарим вас за это заранее.

+1

Мой вопрос был разрешен в прошлых Q и A ниже. http://stackoverflow.com/questions/10167956/rails-shows-warning-cant-verify-csrf-token-authenticity-from-a-restkit-post – gipcompany

+0

Это может вам помочь! Посмотрите. https://stackoverflow.com/questions/35181340/rails-cant-verify-csrf-token-authenticity-when-making-a-post-request –

ответ

65

Вы можете сделать это, добавив

skip_before_filter :verify_authenticity_token 

к контроллеру. Таким образом, все входящие запросы контроллера пропускают фильтр: verify_authenticity_token.

+3

Какие-либо недостатки этого решения? Это стандартная задача для API? В application_controller есть «подсказка» API: '# Для API-интерфейсов вы можете использовать: null_session вместо этого.' – Sebastialonso

+1

Да, если ваше приложение запускается только в браузере, удаление этого разрешает CROSS-SITE-REQUEST-FORGERY http: //en.wikipedia.org/wiki/Cross-site_request_forgery –

+3

И для API JSON, привязанных к вашим Rails-представлениям, я рекомендую использовать CSRF-защиту. Но для API, которые потребляются мобильными клиентами или каким-либо другим приложением, отличным от приложения Rails, это должно быть отключено. –

19

Для рельсов 4 должно быть

skip_before_action :verify_authenticity_token, only: [:one_or_two_actions_here] 

Обратите внимание, что вы должны избегать пропуска verify_authenticity_token всех действий контроллера, вместо этого используйте опцию only пропускать только там, где нужно. See the docs

Смежные вопросы