Как обрабатывать исключение OAuth в паспорте Laravel?

Как обрабатывать исключение OAuth в паспорте Laravel?

25.06.2019 12:19:38 Просмотров 22 Источник

Я работаю над паспортным пакетом 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?

FHusquinet

25.06.2019 01:27:16

Хороший способ поймать определенные исключения-добавить свою пользовательскую логику в render.

Например, вы можете использовать:

App\Exceptions\Handler
https://stackoverflow.com/questions/56750682/how-to-handle-oauth-exception-in-laravel-passport/56751934#comment100062902_56751934
Спасибо за ответ, но он не работает вообще.
srijib

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');

    }
}

Mustafa Akçakaya

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;
});
Закрыть X