2014-01-07 90 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(){}); 

当然,这不应该是如何工作的,过滤器应该触发,不管是什么。

相关问题