CustomUserMessageAuthenticationException
Исключение CustomUserMessageAuthenticationException
используется в процессе аутентификации для того,
чтобы прервать вход и показать пользователю
своё собственное сообщение об ошибке.
Оно наследуется от AuthenticationException
и первым параметром принимает текст сообщения,
который будет выведен в форме входа.
Вторым параметром можно передать массив
дополнительных данных для сообщения.
Синтаксис
new CustomUserMessageAuthenticationException(
string $message = '',
array $messageData = [],
int $code = 0,
Throwable $previous = null
)
Пример
Давайте выбросим исключение в аутентификаторе, если пользователь не найден:
<?php
namespace AppSecurity;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentSecurityCoreExceptionCustomUserMessageAuthenticationException;
use SymfonyComponentSecurityHttpAuthenticatorAuthenticatorInterface;
use SymfonyComponentSecurityHttpAuthenticatorPassport;
use SymfonyComponentSecurityHttpAuthenticatorSelfValidatingPassport;
use SymfonyComponentSecurityHttpAuthenticatorUserBadge;
class UserAuthenticator implements AuthenticatorInterface
{
public function authenticate(Request $request): Passport
{
$apiToken = $request->headers->get('X-AUTH-TOKEN');
if (null === $apiToken) {
throw new CustomUserMessageAuthenticationException(
'Token not found'
);
}
return new SelfValidatingPassport(
new UserBadge($apiToken)
);
}
}
?>
Результат выполнения кода при пустом заголовке:
"Token not found"
Пример
Давайте передадим массив данных в сообщение и подставим их через плейсхолдеры:
<?php
namespace AppSecurity;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentSecurityCoreExceptionCustomUserMessageAuthenticationException;
use SymfonyComponentSecurityHttpAuthenticatorAuthenticatorInterface;
use SymfonyComponentSecurityHttpAuthenticatorPassport;
use SymfonyComponentSecurityHttpAuthenticatorSelfValidatingPassport;
use SymfonyComponentSecurityHttpAuthenticatorUserBadge;
class UserAuthenticator implements AuthenticatorInterface
{
public function authenticate(Request $request): Passport
{
$login = $request->request->get('login');
if ('user' !== $login) {
throw new CustomUserMessageAuthenticationException(
'User {{ login }} was not found',
['{{ login }}' => $login]
);
}
return new SelfValidatingPassport(
new UserBadge($login)
);
}
}
?>
Результат выполнения кода при логине 'abcde':
"User abcde was not found"
Смотрите также
-
исключение
AuthenticationException,
базовый класс ошибок аутентификации -
исключение
AccessDeniedException,
которое выбрасывается при отказе в доступе -
исключение
HttpException,
базовый класс HTTP-исключений Symfony -
метод
getMessage,
который возвращает текст сообщения исключения