我发现可以在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页面。我该怎么做?
答案 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
吗?