0

我發現可以在ApplicationController中重寫handle_unverified_request方法,以重寫Rails處理InvalidAuthenticityToken錯誤的方式。默認情況下,handle_unverified_request將增加InvalidAuthenticityToken錯誤。我已經重寫了這個方法,像這樣如何使用InvalidAuthenticityToken錯誤重定向

def handle_unverified_request 
    redirect_to '/422' 
end 

不過,我使用的空中剎車該記錄是在我的Rails應用程序引發的錯誤。根據answer,Rails可能會引發錯誤並將用戶重定向到404頁面。 422頁面是否存在同樣的問題?我想提高InvalidAuthenticityToken並將用戶重定向到422頁面。我怎麼做?

+0

檢出[此主題](http://stackoverflow.com/questions/25841377/rescue-from-actioncontrollerroutingerror-in-rails4/25842118#25842118)。您可以按照相同的策略進行異常處理 –

回答

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 
0

根據該鏈接,發佈,Rails不redirect用戶404頁,它renders 404頁代替。當InvalidAuthenticityToken錯誤時,Rails必須默認爲render 422頁面。它在機架中間件級別完成。

如果默認行爲是不是你想要的,你需要redirect和減速板來記錄異常,那麼你必須處理異常和做重定向了! Airbrake記錄它。我認爲Airbrake在Rake Middleware級別上記錄異常,因此您必須以某種方式自定義Rack Middleware的異常處理程序才能獲得您想要的。您必須找出Airbrake在何處記錄異常,並確保您的自定義異常處理程序在日誌記錄後工作。

您確定要redirect而不是render