2014-01-07 73 views
1

我正在使用Laravel 4.1創建api。我遇到了身份驗證和自定義錯誤的問題。我想先檢查用戶是否已通過身份驗證,然後顯示錯誤消息。例如localhost:8080/trips/1不是有效的資源;如果我去那個URL它給我404沒有發現錯誤,即使我沒有被認證。我的觀點是首先檢查身份驗證,然後檢查錯誤。我正在使用laravel http基本身份驗證。這裏是我的過濾代碼:即使用戶未驗證,Laravel也會給出404錯誤

Route::filter('api.auth', function() 
{ 

    if (!Request::getUser()) 
    { 
     App::abort(401, 'A valid API key is required'); 
    } 

    $user = User::where('api_key', '=', Request::getUser())->first(); 

    if (!$user) 
    { 
     App::abort(401); 
    } 

    Auth::login($user); 
}); 

這裏是我的自定義錯誤:

App::error(function(Symfony\Component\HttpKernel\Exception\HttpException $e, $code) 
{ 
    $headers = $e->getHeaders(); 

    switch ($code) 
    { 
     case 401: 
      $default_message = 'Invalid API key'; 
      $headers['WWW-Authenticate'] = 'Basic realm="REST API"'; 
     break; 

     case 403: 
      $default_message = 'Insufficient privileges to perform this action'; 
     break; 

     case 404: 
      $default_message = 'The requested resource was not found'; 
     break; 

     default: 
      $default_message = 'An error was encountered'; 
    } 

    return Response::json(array(
     'error' => $e->getMessage() ?: $default_message, 
    ), $code, $headers); 
}); 

這裏是我的路線:

Route::group(array('before' => 'api.auth'), function() 
{ 

    Route::resource('trips', 'TripController', array(
     'except' => array('create', 'edit') 
    )); 
}); 

錯誤執行代碼的過濾器之前,這就是爲什麼我得到404錯誤,而不是得到401.有什麼辦法先執行過濾器,然後錯誤?

+0

還在爲此?無法複製,先保持顯示401。 – random

回答

0

我也得到了這個問題,我的工作方式(雖然我根本不是粉絲)在組中做了以下內容,但不包含向控制器的索引方法發送請求的路由:

Route::any('/', function(){}); 

當然,這不應該是如何工作的,過濾器應該觸發,不管是什麼。

相關問題