2017-11-25 77 views
0

即時通訊工作與laravel 5.5並試圖保護api路由。我將'auth'中間件分配給了這條路線,但是當我測試它時,我得到一個InvalidArgumentException又名'Route [登錄]未定義'。我不以任何方式迴應這條路線,laravel automaticaly試圖重定向到這條路線。我發現在文件中的以下代碼行「laravel \框架的\ src \照亮\基金會\ \例外Handler.php」:Laravel自動重定向驗證異常

/* 
* Convert an authentication exception into a response. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Illuminate\Auth\AuthenticationException $exception 
* @return \Illuminate\Http\Response 
*/ 
protected function unauthenticated($request, AuthenticationException $exception) 
{ 
    return $request->expectsJson() 
       ? response()->json(['message' => $exception->getMessage()], 401) 
       : redirect()->guest(route('login')); 
} 

所以我想知道,什麼在全球範圍內捕獲這個異常每路線的最佳途徑?

回答

0

從我的理解來看,它是因爲你在路由中添加了一個auth中間件。因此,無論身份驗證何時訪問路由,路由都將被重定向到默認登錄頁面name login route

您可以使用以下代碼將unauthenticated方法添加到app/Exceptions/Handler.php。因此,如果請求處於API或期望JSON響應,它將給出帶有JSON響應的401狀態碼。如果使用網絡路由訪問路由,它將被重定向到默認頁面。在下面的例子中,我將它重定向到一個登錄頁面。

注意:此方法存在於app/Exceptions/Handler.php直到laravel 5.4。

protected function unauthenticated($request, AuthenticationException $exception) 
{ 
    if ($request->expectsJson()) { 
     return response()->json(['error' => 'Unauthenticated.'], 401); 
    } 
    return redirect()->guest(('login')); 
} 

不要忘了導入use Illuminate\Auth\AuthenticationException;

編輯:解釋的錯誤Route [login] is not defined。這是因爲laravel試圖重定向到named route。如果您使用的是laravel auth scaffolding,則此命名路線可用。如果您手動創建功能,即使路線login存在,它應該被命名爲login。欲瞭解更多信息,請參閱https://laravel.com/docs/5.5/routing#named-routes