2015-12-16 58 views
3

我打開Laravel窗體並將其保留很長時間(5/6小時)或休眠我的電腦。在提交表單後,經過很長時間或從休眠狀態恢復後,它顯示一個Token Mismatch錯誤。如何處理令牌不匹配異常

我自己沒有任何_token字段。但Laravel在每種形式中都添加了一個_token字段。它看起來像這樣:

<input name="_token" type="hidden" value="YLyMGdfLKZESo51SYUHLKAzC6MNRLOQc9D9e2RFq"> 

我知道有一些令牌過期問題。但是,向客戶展示這樣的錯誤信息是不好的。

現在,我想將應用程序重定向到登錄頁面或主頁,如果有任何令牌過期問題,或者顯示自定義錯誤消息而不是Laravel Token Mismatch錯誤。

注意:我不想增加令牌過期時間。

回答

2

所有異常由應用程序\例外處理\ Handler類

塔卡看看Laravel 5.1 errors#render-method你會發現,你可以創建自定義 Exeption render,請檢查下面的例子爲TokenMismatchException錯誤,將在用戶索引視圖重定向與自定義消息:

public function render($request, Exception $e) 
{ 
    if ($e instanceof \Illuminate\Session\TokenMismatchException) { 
     return response()->view('index', ['message' => 'custom message'], 500); 
    } 
    return parent::render($request, $e); 
} 

希望這有助於。

+0

好的,我已經在'handler.php'中的'render()'方法中加入了這個if($ e instanceof TokenMismatchException){ return response() - > view('pages.home',['message '=>'令牌已經過期'],500); }' 讓我們看了很久。 – smartrahat

1

我沒有做我的方式達到Laravel 5.1還,但由於4.2,我用這樣的事情在app/start/global.php處理令牌不匹配錯誤:

App::error(function(Exception $exception, $code) 
{ 
    // if they get token mismatch, redirect to homepage 
    if(strpos($exception->__toString(), 'Illuminate\Session\TokenMismatchException') !== false){ 
     return Redirect::route('getHome')->with('notice', Lang::get('messages.sessionExpired')); 
    } 

    // rest of error handling... 
}); 

我想這將需要一些Laravel 5.1的修改,但我希望它能幫助你走上正確的軌道!

這裏有一些鏈接,可能會幫助您: