Я пытаюсь использовать паспорт laravel5.7 + для своего API-сервера (пакет dingo не совместим с некоторыми из моих пакетов, я должен отказаться от него).Я хочу, чтобы глобальный элемент был более совместим с обработкой ошибок API, поэтому я изменил App\Exceptions\Handler
.
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
{
/**
* A list of the exception types that are not reported.
*
* @var array
*/
protected $dontReport = [
//
];
/**
* A list of the inputs that are never flashed for validation exceptions.
*
* @var array
*/
protected $dontFlash = [
'password',
'password_confirmation',
];
/**
* Report or log an exception.
*
* @param \Exception $exception
* @return void
*/
public function report(Exception $exception)
{
parent::report($exception);
}
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
{
// Determine whether it is an API interface
if($request->is('api/*')) {
$response = [];
$error = $this->convertExceptionToResponse($exception);
$response['message'] = $exception->getMessage();
$response['status_code'] = $error->getStatusCode();
if(config('app.debug')) {
if($error->getStatusCode() >= 500) {
$response['debug']['line'] = $exception->getLine(); // error line
$response['debug']['file'] = $exception->getFile(); // error file
$response['debug']['class'] = get_class($exception); // error position
$response['debug']['trace'] = explode("\n", $exception->getTraceAsString()); //Error stack
}
}
// response api
return response()->json($response, $error->getStatusCode());
} else {
// response web
return parent::render($request, $exception);
}
}
}
подробности ошибки:
{
"message": "Unauthenticated.",
"status_code": 500,
"debug": {
"line": 67,
"file": "/Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
"class": "Illuminate\\Auth\\AuthenticationException",
"trace": [
"#0 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(41): Illuminate\\Auth\\Middleware\\Authenticate->authenticate(Object(Illuminate\\Http\\Request), Array)",
"#1 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Auth\\Middleware\\Authenticate->handle(Object(Illuminate\\Http\\Request), Object(Closure), 'api')",
"#2 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))",
"#3 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(58): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))",
"#4 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle(Object(Illuminate\\Http\\Request), Object(Closure), 60, '1')",
"#5 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))",
"#6 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))",
"#7 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php(684): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))",
"#8 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php(659): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))",
"#9 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php(625): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))",
"#10 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php(614): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))",
"#11 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))",
"#12 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))",
"#13 /Users/noecs/Desktop/noecsSystemLaravel/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))",
"#14 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Fideloper\\Proxy\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))",
"#15 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))",
"#16 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(31): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))",
"#17 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))",
"#18 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))",
"#19 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(31): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))",
"#20 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))",
"#21 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))",
"#22 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))",
"#23 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))",
"#24 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))",
"#25 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(62): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))",
"#26 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode->handle(Object(Illuminate\\Http\\Request), Object(Closure))",
"#27 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))",
"#28 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))",
"#29 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))",
"#30 /Users/noecs/Desktop/noecsSystemLaravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))",
"#31 /Users/noecs/Desktop/noecsSystemLaravel/vendor/swooletw/laravel-swoole/src/Server/Sandbox.php(257): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))",
"#32 /Users/noecs/Desktop/noecsSystemLaravel/vendor/swooletw/laravel-swoole/src/Server/Sandbox.php(196): SwooleTW\\Http\\Server\\Sandbox->handleRequest(Object(Illuminate\\Http\\Request))",
"#33 /Users/noecs/Desktop/noecsSystemLaravel/vendor/swooletw/laravel-swoole/src/Server/Sandbox.php(182): SwooleTW\\Http\\Server\\Sandbox->prepareResponse(Object(Illuminate\\Http\\Request))",
"#34 /Users/noecs/Desktop/noecsSystemLaravel/vendor/swooletw/laravel-swoole/src/Server/Manager.php(221): SwooleTW\\Http\\Server\\Sandbox->run(Object(Illuminate\\Http\\Request))",
"#35 {main}"
]
}
}
Я попытался ввести неправильный token
в соответствии со спецификацией разработки API, я должен вернуть TOKEN ошибки 401
.Но помимо моих ожиданий, вывод программы - ошибка 500
.Это меня очень смущает, я не знаю, как изящно обработать сообщение об ошибке этого API.