Защита Rails CSFR: правильно ли писать before_filter?

Мой контроллер приложения выглядит так:

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :check_csrf
  def check_csrf
    if not verified_request?
      redirect_to root_url, :error => "forgery protection"
      return
    end
  end
end

Без check_csrf Rails записывает предупреждение на консоль сервера о неверных ответах, затем выполнение продолжается как обычно. Поэтому мне пришлось написать свой собственный check_csrf. Теперь все отлично работает. Это правильно? Есть ли более простой способ остановить выполнение неверного запроса?

Версия Rails: 3.1.

1 ответ

Решение

Я думаю, что вы должны переопределить handle_unverified_request.

Что-то вроде того:

class ApplicationController < ActionController::Base
  protect_from_forgery

  protected
    def handle_unverified_request
      redirect_to root_url, :error => "forgery protection"
    end
end
Другие вопросы по тегам