Как обрабатывать исключение OAuth в паспорте Laravel?
Я работаю над паспортным пакетом laravel. Когда я отзываю токен и обращаюсь к аутентифицированной конечной точке, он создает исключение.
Файл журналов содержит "владелец ресурса или сервер авторизации отклонил запрос". Для обработки is exception я создал OAuth middleware и поместил в него код исключения, как указано в этой ссылке: https://www.kingpabel.com/oauth2-exception-custom-error-message/
public function handle($request, Closure $next)
{
//return $next($request);
try {
$response = $next($request);
// Was an exception thrown? If so and available catch in our middleware
if (isset($response->exception) && $response->exception) {
throw $response->exception;
}
return $response;
} catch (OAuthException $e) {
$data = [
// 'error' => $e->errorType,
// 'error_description' => $e->getMessage(),
'error' => 'Custom Error',
'error_description' => 'Custom Description',
];
return \Response::json($data, $e->httpStatusCode, $e->getHttpHeaders());
}
}
Я хочу вернуть ошибку в формате json, как:
{
"error": "Token is invalid!"
}
Я буду признателен, если кто-нибудь направит меня в этом отношении. Спасибо,
Ответы - Как обрабатывать исключение OAuth в паспорте Laravel? / How to handle OAuth exception in Laravel Passport?

25.06.2019 01:27:16
Хороший способ поймать определенные исключения-добавить свою пользовательскую логику в render
.
Например, вы можете использовать:
App\Exceptions\Handler


01.12.2019 04:34:48
Мне удалось получить его таким образом, в handler.php
use League\OAuth2\Server\Exception\OAuthServerException;
use Illuminate\Auth\AuthenticationException;
....
public function report(Exception $exception)
{
if ($exception instanceof OAuthServerException || $exception instanceof AuthenticationException) {
if(isset($exception->guards) && isset($exception->guards()[0]) ==='api')
response()->json('Unauthorized', 401) ;
else if ($exception instanceof OAuthServerException)
response()->json('Unauthorized', 401) ;
}
parent::report($exception);
}
затем для предотвращения ошибки перекрестного происхождения в браузере добавлено middleware
ПО следующего вида
Примечание: сделайте промежуточное ПО безопасным в производстве
kernal.php
protected $middleware = [
....
\App\Http\Middleware\Cors::class,
];
cors.php
use Closure;
class Cors
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request)
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
->header('Access-Control-Allow-Headers',' Origin, Content-Type, Accept, Authorization, X-Request-With')
->header('Access-Control-Allow-Credentials',' true');
}
}

17.01.2020 02:45:58
Теперь можно обрабатывать исключения OAuth с помощью Laravel Passport 8.0+ . Копия поставщика/фреймворк Laravel/паспорт/ГКЗ/и HTTP/промежуточного/HandleOAuthErrors.php для app / Http / Middleware / HandleOAuthErrors.на PHP и зарегистрировать вязку в \приложения\поставщиков\AppServiceProvider::зарегистрируйтесь() способ:
$this->app->bind(HandleOAuthErrors::class, function () {
return new \App\Http\Middleware\HandleOAuthErrors;
});