Как выполнить перенаправление с ошибкой InvalidAuthenticityToken

Я обнаружил, что метод handle_unverified_request можно переопределить в ApplicationController, чтобы переписать то, как Rails обрабатывает InvalidAuthenticityToken ошибки. По умолчанию handle_unverified_request вызовет ошибку InvalidAuthenticityToken. Я переопределил этот метод вот так

def handle_unverified_request
  redirect_to '/422'
end

Однако я использую Airbrake, который записывает ошибки, возникающие в моем приложении Rails. Согласно этому ответу, Rails может вызвать ошибку И перенаправить пользователя на страницу 404. То же самое и для страницы 422? Я хочу поднять InvalidAuthenticityToken и перенаправить пользователя на страницу 422. Как мне это сделать?


person thank_you    schedule 29.12.2016    source источник
comment
ознакомьтесь с этой веткой. Вы можете следовать той же стратегии для любой обработки исключений.   -  person Andrey Deineko    schedule 30.12.2016


Ответы (2)


ApplicationController.rb

  protect_from_forgery with: :exception

  rescue_from ActionController::InvalidAuthenticityToken, with: :rescue_422

  def handle_unverified_request
    raise(ActionController::InvalidAuthenticityToken)
  end

  def rescue_422
    redirect_to '/422'
  end
person Kamber    schedule 29.12.2016

Согласно опубликованной вами ссылке, Rails не redirect пользователя на страницу 404, а вместо этого renders страницу 404. Когда InvalidAuthenticityToken ошибка, Rails по умолчанию должен render 422 страницы. Это делается на уровне промежуточного программного обеспечения стойки.

Если поведение по умолчанию не то, что вы хотите, и вам нужно redirect и Airbrake для регистрации исключения, тогда вы должны обработать исключение и выполнить перенаправление ПОСЛЕ! Airbrake регистрирует это. Я думаю, что Airbrake регистрирует исключения на уровне промежуточного программного обеспечения Rake, поэтому вам придется как-то настроить обработчик исключений Rack Middleware, чтобы получить то, что вы хотите. Вам нужно будет выяснить, где Airbrake регистрирует исключения, и убедиться, что ваш пользовательский обработчик исключений работает после регистрации.

Вы уверены, что хотите redirect, а не render?

person chumakoff    schedule 29.12.2016