Как перехватить глобальные исключения в laravel 5, сгенерированные пакетом tymondesigns / jwt-auth?

Я работаю над приложением RESTful, использующим Laravel 5, и пытаюсь перехватить исключения и сгенерировать соответствующий ответ. Я также использую tymondesigns / JWT-авт пакет так, чтобы все ответы API были в формате JSend JSON.

Прямо сейчас я пытаюсь поймать TokenExpiredException который возникает, когда истекает срок действия данного токена. Так что я попробовал это в Handler.php:

if($e instanceof TokenExpiredException)
{
return jsend()->error()
->message("Token Expired")
->code(403)
->data([null])
->get();
}

Но я все еще не могу поймать это исключение и дать ответ JSON. Хотя я могу сделать это для других исключений, таких как:

if ($e instanceof ModelNotFoundException) {
$e = new NotFoundHttpException($e->getMessage(), $e);

return jsend()->error()
->message("404 Model Not Found")
->data([null])
->get();
}

А также:

if ($this->isHttpException($e))
{
if($e instanceof NotFoundHttpException)
{
return jsend()->error()
->message("404 Route Not Found")
->data([null])
->get();
}
return $this->renderHttpException($e);
}

Как обрабатывать другие исключения в Laravel?

7

Решение

Кажется, я забыл использовать пространство имен:

if($e instanceof \Tymon\JWTAuth\Exceptions\TokenExpiredException)
{
return jsend()->error()
->message("Token Expired")
->code(403)
->data([null])
->get();
}

Маленькие ошибки! Facepalm

4

Другие решения

Если кто-то задается вопросом с такой же проблемой для новых Laravel (5.4) и jwt-auth (1.0. * @ Dev) … теперь есть другая причина / решение для этого.

Провайдер ловит экземпляр \Tymon\JWTAuth\Exceptions\TokenExpiredException и отбрасывает экземпляр Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException, Исходное исключение все еще доступно с методом getPrevious()поэтому обработка ошибок теперь будет выглядеть примерно так:

public function render($request, Exception $exception)
{
if ($exception->getPrevious() instanceof \Tymon\JWTAuth\Exceptions\TokenExpiredException) {
return response()->json(['error' => $exception->getPrevious()->getMessage()], $exception->getStatusCode());
} else if ($exception->getPrevious() instanceof \Tymon\JWTAuth\Exceptions\TokenInvalidException) {
return response()->json(['error' => $exception->getPrevious()->getMessage()], $exception->getStatusCode());
}

return parent::render($request, $exception);
}
3

По вопросам рекламы [email protected]