如何使用InvalidAuthenticityToken错误重定向

时间:2016-12-29 19:57:26

标签: ruby-on-rails ruby ruby-on-rails-4 csrf-protection airbrake

我发现可以在handle_unverified_request中覆盖ApplicationController方法,以重写Rails处理InvalidAuthenticityToken错误的方式。默认情况下,handle_unverified_request会引发InvalidAuthenticityToken错误。我已经覆盖了这种方法

def handle_unverified_request
  redirect_to '/422'
end

但是,我使用Airbrake记录了我的Rails应用程序中出现的错误。根据此answer,Rails可以引发错误并将用户重定向到404页面。 422页面是否存在同样的问题?我想提出InvalidAuthenticityToken并将用户重定向到422页面。我该怎么做?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

根据您发布的链接,Rails没有redirect用户访问404页面,而是renders 404页面。出现InvalidAuthenticityToken错误时,Rails默认情况下必须render 422页。它是在Rack Middleware级别完成的。

如果默认行为不是你想要的,你需要redirect和Airbrake来记录异常,那么你必须处理异常并重新定向AFTER! Airbrake记录它。我认为Airbrake会在Rake Middleware级别记录异常,因此您必须以某种方式自定义Rack Middleware的异常处理程序以获得您想要的内容。您必须找出Airbrake记录异常的位置,并确保在记录后自定义异常处理程序工作。

您确定要redirect,而不是render吗?