Исключение LockedException
Исключение LockedException наследуется от
AccountStatusException и реализует
AuthenticationException. Оно выбрасывается
компонентом Security при попытке аутентификации
пользователя, чья учётная запись помечена как
заблокированная. Первым параметром конструктора
передаётся сообщение об ошибке, вторым - объект
пользователя UserInterface, третьим - код
исключения.
Синтаксис
new LockedException(string $message = '', ?UserInterface $user = null, int $code = 0, ?Throwable $previous = null)
Пример
Давайте выбросим исключение LockedException
при проверке статуса пользователя:
<?php
namespace AppSecurity;
use AppEntityUser;
use SymfonyComponentSecurityCoreExceptionLockedException;
use SymfonyComponentSecurityCoreUserUserCheckerInterface;
use SymfonyComponentSecurityCoreUserUserInterface;
class UserChecker implements UserCheckerInterface
{
public function checkPreAuth(UserInterface $user): void
{
if (!$user instanceof User) {
return;
}
if ($user->isLocked()) {
throw new LockedException('User account is locked.');
}
}
public function checkPostAuth(UserInterface $user): void
{
}
}
?>
Результат выполнения кода при заблокированном пользователе:
"User account is locked."
Пример
Давайте перехватим исключение и получим объект
пользователя через метод getUser:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentSecurityCoreExceptionLockedException;
use SymfonyComponentRoutingAttributeRoute;
class SecurityController extends AbstractController
{
#[Route('/login', name: 'app_login')]
public function login(): Response
{
try {
throw new LockedException('Account locked.');
} catch (LockedException $e) {
$user = $e->getUser();
$message = $e->getMessage();
return new Response($message);
}
}
}
?>
Результат выполнения кода:
Account locked.
Пример
Давайте обработаем исключение в слушателе событий
AuthenticationFailureEvent:
<?php
namespace AppEventListener;
use SymfonyComponentSecurityCoreEventAuthenticationFailureEvent;
use SymfonyComponentSecurityCoreExceptionLockedException;
class LoginFailureListener
{
public function onAuthenticationFailure(AuthenticationFailureEvent $event): void
{
$exception = $event->getAuthenticationException();
if ($exception instanceof LockedException) {
$user = $exception->getUser();
$message = $exception->getMessage();
echo $message;
}
}
}
?>
Результат выполнения кода:
"User account is locked."
Смотрите также
-
исключение
DisabledException,
которое выбрасывается при отключённой учётной записи -
исключение
AccountExpiredException,
которое выбрасывается при истёкшей учётной записи -
исключение
AuthenticationException,
которое является базовым для ошибок аутентификации -
исключение
CustomUserMessageAuthenticationException,
которое позволяет задать своё сообщение пользователю