0

我发现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 页面。我怎么做?

4

2 回答 2

1

根据您发布的链接,Rails 不会redirect将用户转到 404 页面,而是使用renders404 页面。出错时InvalidAuthenticityToken,Railsrender默认必须为 422 页。它是在机架中间件级别完成的。

如果默认行为不是您想要的并且您需要redirectAirbrake 来记录异常,那么您必须处理异常并在之后执行重定向!Airbrake 记录它。我认为 Airbrake 在 Rake 中间件级别记录异常,因此您必须以某种方式自定义 Rack 中间件的异常处理程序以获得您想要的。您必须找出 Airbrake 记录异常的位置,并确保您的自定义异常处理程序在记录后工作。

你确定你想要redirect,不是render吗?

于 2016-12-29T22:37:13.837 回答
0

应用控制器.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
于 2016-12-29T22:32:35.017 回答