Я пишу приложение в Symfony 3.4, и у меня возникает вопрос при аутентификации моего пользователя: у меня есть LoginFormAuthenticator
, который расширяет AbstractFormLoginAuthenticator
.Реализуя getUser(array, UserProviderInterface)
метод GuardAuthenticatorInterface
, оригинальная документация Phpdoc гласит:
"Возвращает объект UserInterface на основе учетных данных. учетные данные являются возвращаемым значением из getCredentials() Вы можете выбросить AuthenticationException, если хотите. Если вы вернете значение NULL, то вам будет выдано исключение UsernameNotFoundException. "
Однако UserProviderInterface
, переданный методу, является моей пользовательской реализацией userProvider.Поэтому я просто делаю:
return $userProvider->loadUserByUsername($credentials["username"]);
Я немного смущен этим, потому что оригинальный phpdoc из UserProviderInterface#loadUserByUsername()
говорит:
Загружает пользователя для данного имени пользователя.Этот метод должен выдавать исключение UsernameNotFoundException, если пользователь не найден.
Таким образом, провайдер должен выдать UsernameNotFoundException
, если пользователь не найден, и Authenticator должен выдать AuthenticationException
в этом случае.Так что, если мой провайдер не может загрузить пользователя, он должен выбросить UsernameNotFoundException
, поймать его внутри Аутентификатора, а когда поймано, либо выбросить AuthenticationException
, либо вернуть ноль, так что будет выдан новый UsernameNotFoundException
.Это звучит немного глупо.Или мне разрешено выдавать Исключение от провайдера через Аутентификатор?