Хотелось бы понять, как работает безопасность с провайдерами пользователей. В security.yaml я могу написать:
providers:
entity_provider:
entity:
class: App\Entity\User
property: userLogin
...
firewalls:
...
json_login:
username_path: userLogin
Таким образом, определите «userLogin» как правильное поле для использования в качестве «имени пользователя» для аутентификации. Это верно? Тогда почему кажется, что мой класс User должен реализовывать Symfony\Component\Security\Core\User\UserInterface::getUsername()? Что должно произойти, если эти функции вернут что-то отличное от conf? В каких случаях будет использоваться один, а другой нет?





Метод Symfony\Component\Security\Core\User\UserInterface::getUsername() используется в Symfony для проверки того, какое свойство используется в качестве идентификатора, оно используется в аутентификаторе, брандмауэре ... Он будет использоваться всеми методами аутентификации. В вашем случае вам следует написать
/**
* @return string
*/
public function getUsername(): ?string
{
return $this->userLogin;
}
Свойство в файле conf будет проверено, когда вы отправите форму входа в систему на обычной веб-странице. Это избыточно.
@Shautieh, это не похоже на то, что симфония хочет, чтобы ошибки размножались, они в основном хотят ретро-совместимости. Вот как это работало раньше. Для вашего поля userName, да, это коллизия, вы не можете этого сделать.
Хорошо, так что они действительно избыточны ... Это похоже на то, что symfony хочет, чтобы ошибки умножались ... Моя проблема в том, что у меня есть поле userName в User, с созданным доктриной получателем getUserName, а php не чувствителен к регистру, поэтому мне нужно обновить мой схему и исправить весь необходимый код.