Отключить токен CSRF в рельсах 3

105

У меня есть приложение rails, которое обслуживает некоторые API для приложения iPhone. Я хочу иметь возможность просто публиковать сообщения на ресурсе, не заботясь о получении правильного токена CSRF. Я пробовал некоторые методы, которые я вижу здесь, в stackoverflow, но, похоже, они больше не работают на рельсах 3.

Спасибо за помощь мне.

Симоне Д'Амико
источник

Ответы:

175

В контроллере, где вы хотите отключить CSRF, проверьте:

skip_before_action :verify_authenticity_token

Или отключить его для всего, кроме нескольких способов:

skip_before_action :verify_authenticity_token, :except => [:update, :create]

Или отключить только указанные методы:

skip_before_action :verify_authenticity_token, :only => [:custom_auth, :update]

Подробнее: Защита от подделки запросов RoR

Майк Льюис
источник
1
Это правильный ответ для приложений, в которых есть как обычные формы, доступные в браузере, так и конечные точки API. Ответ Маркуса Проске был бы правильным, если бы вы были абсолютно уверены, что в вашем приложении не будет никаких форм, доступных через браузер.
Асфанд Кази
Куда именно это идет? Что делать, если контроллер является частью какого-то драгоценного камня?
аккаунт
Могу я спросить, можете ли вы ответить на этот очень похожий вопрос? stackoverflow.com/questions/50159847/…
105

В Rails3 вы можете отключить токен csrf в вашем контроллере для определенных методов:

protect_from_forgery :except => :create 
Маркус Проске
источник
12
Для любого читающего, обратите внимание , что это то , что должно идти в ApplicationController. Ответ Майка Льюиса ниже ( skip_before_filter :verify_authenticity_token) - как отключить его для каждого контроллера, предполагая, что этот контроллер наследуется от ApplicationController.
NudeCanalTroll
Кажется, это небезопасно stackoverflow.com/questions/10676018/… . Что вы думаете? это?
сайты
@NudeCanalTroll, вы имеете в виду, поместив это в контроллер, где я хочу, чтобы он не работал?
BlackDivine
Могу я спросить, можете ли вы ответить на этот очень похожий вопрос? stackoverflow.com/questions/50159847/…
32

В Rails 4 теперь у вас есть возможность писать skip_before_actionвместо skip_before_filter.

# Works in Rails 4 and 5
skip_before_action :verify_authenticity_token

или

# Works in Rails 3 and 4 (deprecated in Rails 4 and removed in Rails 5)
skip_before_filter :verify_authenticity_token
jason328
источник
1
Какая разница?
Адам Д. Руппе,
Могу я спросить, можете ли вы ответить на этот очень похожий вопрос? stackoverflow.com/questions/50159847/…
Джон Сэм, когда у меня будет время, я постараюсь это сделать.
jason328