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.有什么办法先执行过滤器,然后错误?
还在为此?无法复制,先保持显示401。 – random