Исключение UnauthorizedHttpException
Исключение UnauthorizedHttpException выбрасывается,
когда клиент не прошёл аутентификацию и должен
авторизоваться повторно. Оно относится к семейству
HTTP-исключений и автоматически превращается
в ответ со статусом 401. Первым параметром
передаётся имя challenge-схемы (например, 'Basic'
или 'Bearer'), вторым - текст сообщения,
третьим - предыдущее исключение, четвёртым - код ошибки,
пятым - массив заголовков ответа.
Синтаксис
new UnauthorizedHttpException(string $challenge, string $message = '', ?Throwable $previous = null, int $code = 0, array $headers = [])
Пример
Давайте выбросим исключение внутри метода контроллера:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentHttpKernelExceptionUnauthorizedHttpException;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
throw new UnauthorizedHttpException('Bearer', 'Token is missing');
}
}
?>
После запроса Symfony вернёт ответ со статусом 401
и заголовком WWW-Authenticate со значением Bearer:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer
Token is missing
Пример
Давайте перехватим исключение и получим его статус-код
через метод getStatusCode:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentHttpKernelExceptionUnauthorizedHttpException;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
try {
throw new UnauthorizedHttpException('Basic', 'abcde');
} catch (UnauthorizedHttpException $e) {
$res = $e->getStatusCode();
return new Response((string) $res);
}
}
}
?>
Результат выполнения кода:
401
Пример
Давайте получим текст сообщения через метод getMessage:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentHttpKernelExceptionUnauthorizedHttpException;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
try {
throw new UnauthorizedHttpException('Bearer', 'user');
} catch (UnauthorizedHttpException $e) {
return new Response($e->getMessage());
}
}
}
?>
Результат выполнения кода:
"user"
Смотрите также
-
исключение
HttpException,
базовый класс для HTTP-исключений -
исключение
AccessDeniedHttpException,
которое сигнализирует об ошибке 403 -
метод
getStatusCode,
который возвращает статус-код исключения -
метод
getMessage,
который возвращает текст сообщения