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