即使用户未经过身份验证,Laravel也会出现404错误

时间:2014-01-07 19:48:56

标签: laravel

我正在使用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.有没有办法先执行过滤然后错误?

1 个答案:

答案 0 :(得分:0)

我也遇到了这个问题,我解决这个问题的方式(虽然我根本不是粉丝)在组内进行以下操作:不包含向控制器发送请求的路由&# 39; s索引方法:

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

当然,这不应该是它的工作原理,无论如何都应该触发过滤器。