Вимкніть маркер 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. Відповідь Маркуса Проскі була б правильною, якби ви були абсолютно впевнені, що у вашому додатку не буде доступних будь-яких браузерних форм.
Asfand Qazi

Куди саме це йде? Що робити, якщо контролер є частиною дорогоцінного каміння?
Викиньте рахунок

Чи можу я запитати вас, чи можете ви відповісти на це дуже схоже запитання? 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

1
Яка різниця?
Адам Д. Руппе

Чи можу я запитати вас, чи можете ви відповісти на це дуже схоже питання? stackoverflow.com/questions/50159847 / ...

Джон Сем, коли у мене буде час, я спробую обійтись.
jason328
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.