我正在使用Laravel 4.1创建一个api。我遇到身份验证和自定义错误的问题。我想首先检查用户是否经过身份验证,然后显示错误消息。例如localhost:8080 / trips / 1不是有效的资源;如果我去那个网址它给我404找不到错误,即使我没有通过身份验证。我的观点是首先检查身份验证然后检查错误。我正在使用laravel http基本身份验证。这是我的过滤器代码:
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 :(得分:0)
我也遇到了这个问题,我解决这个问题的方式(虽然我根本不是粉丝)在组内进行以下操作:不包含向控制器发送请求的路由&# 39; s索引方法:
Route::any('/', function(){});
当然,这不应该是它的工作原理,无论如何都应该触发过滤器。