РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
551 of 1361 menu

Исключение AuthenticationException

Исключение AuthenticationException выбрасывается компонентом Security, когда процесс аутентификации пользователя не может быть завершён успешно. Оно наследуется от класса RuntimeException и реализует интерфейс AuthenticationExceptionInterface. Первым параметром конструктор принимает текст сообщения об ошибке, вторым - код ошибки, третьим - предыдущее исключение.

Чаще всего это исключение используется как базовый класс для более конкретных исключений безопасности, таких как BadCredentialsException, AccountExpiredException, LockedException, DisabledException и других. Его можно перехватить в слушателе событий безопасности или в собственном аутентификаторе, чтобы вернуть понятный ответ пользователю.

Синтаксис

new AuthenticationException(string $message = '', int $code = 0, ?Throwable $previous = null)

Пример

Давайте выбросим исключение AuthenticationException внутри собственного аутентификатора:

<?php namespace AppSecurity; use SymfonyComponentHttpFoundationRequest; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentSecurityCoreExceptionAuthenticationException; use SymfonyComponentSecurityHttpAuthenticatorAbstractAuthenticator; use SymfonyComponentSecurityHttpAuthenticatorPassportInterface; class CustomAuthenticator extends AbstractAuthenticator { public function supports(Request $request): ?bool { return $request->headers->has('X-AUTH-TOKEN'); } public function authenticate(Request $request): PassportInterface { $token = $request->headers->get('X-AUTH-TOKEN'); if ('abcde' !== $token) { throw new AuthenticationException('Invalid token'); } return new SelfValidatingPassport( new UserBadge($token) ); } public function onAuthenticationFailure(Request $request, AuthenticationException $exception): ?Response { return new Response( 'Authentication failed: ' . $exception->getMessage(), Response::HTTP_UNAUTHORIZED ); } } ?>

Результат выполнения кода при неверном токене:

Authentication failed: Invalid token

Пример

Давайте перехватим исключение AuthenticationException в слушателе событий:

<?php namespace AppEventListener; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentHttpKernelEventExceptionEvent; use SymfonyComponentSecurityCoreExceptionAuthenticationException; class AuthenticationFailureListener { public function onKernelException(ExceptionEvent $event): void { $exception = $event->getThrowable(); if ($exception instanceof AuthenticationException) { $response = new Response( 'Please log in again', Response::HTTP_UNAUTHORIZED ); $event->setResponse($response); } } } ?>

Результат выполнения кода при ошибке аутентификации:

Please log in again

Смотрите также

  • исключение AccessDeniedException,
    которое выбрасывается при отказе в доступе
  • исключение AccountExpiredException,
    которое выбрасывается при истечении срока учётной записи
  • исключение LockedException,
    которое выбрасывается при блокировке пользователя
  • исключение CustomUserMessageAuthenticationException,
    которое позволяет задать своё сообщение об ошибке
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить