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

Исключение DisabledException

Исключение DisabledException относится к компоненту Security и выбрасывается провайдером аутентификации, когда пользователь успешно прошёл проверку учётных данных, но его учётная запись отключена. Это исключение наследуется от AccountStatusException и реализует интерфейс AuthenticationException. Его можно перехватить в слушателе аутентификации, чтобы вывести пользователю понятное сообщение о том, что доступ к учётной записи заблокирован.

Синтаксис

use Symfony\Component\Security\Core\Exception\DisabledException; throw new DisabledException('Your account is disabled.');

Пример

Давайте создадим пользователя с флагом enabled равным false и попробуем его аутентифицировать. Сначала опишем сущность пользователя:

<?php namespace App\Entity; use Symfony\Component\Security\Core\User\UserInterface; class User implements UserInterface { private string $email; private string $password; private bool $enabled = true; public function getEmail(): string { return $this->email; } public function setEmail(string $email): void { $this->email = $email; } public function getPassword(): string { return $this->password; } public function setPassword(string $password): void { $this->password = $password; } public function isEnabled(): bool { return $this->enabled; } public function setEnabled(bool $enabled): void { $this->enabled = $enabled; } public function getRoles(): array { return ['ROLE_USER']; } public function getSalt(): ?string { return null; } public function getUsername(): string { return $this->email; } public function eraseCredentials(): void { } } ?>

Теперь создадим контроллер, который проверяет пользователя и выбрасывает исключение, если его учётная запись отключена:

<?php namespace App\Controller; use App\Entity\User; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Core\Exception\DisabledException; class SecurityController extends AbstractController { #[Route('/login', name: 'security_login')] public function login(): Response { $user = new User(); $user->setEmail('user@example.com'); $user->setEnabled(false); if (!$user->isEnabled()) { throw new DisabledException('Your account is disabled.'); } return new Response('hello'); } } ?>

Результат выполнения кода для отключённого пользователя:

"Your account is disabled."

Пример

Давайте перехватим исключение DisabledException в слушателе и вернём пользователю понятный ответ:

<?php namespace App\EventListener; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Security\Core\Exception\DisabledException; use Symfony\Component\Security\Http\Event\LoginFailureEvent; class AuthenticationListener { public function onLoginFailure(LoginFailureEvent $event): void { $exception = $event->getException(); if ($exception instanceof DisabledException) { $response = new Response('Account is disabled.'); $event->setResponse($response); } } } ?>

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

"Account is disabled."

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

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