Ваш аутентификатор запрашивает репозиторий пользователей.У вас может быть собственный репозиторий, который взаимодействует с InMemoryUserProvider, но я бы порекомендовал вам, когда вы заставите пользователя в своем аутентификаторе использовать также переданный UserProviderInterface.Это будет использоваться в зависимости от того, какой провайдер настроен как в разделе провайдеров, так и в том, который вы выбрали в брандмауэре.Если у вас есть только 1 UserProvider (ваш провайдер in_memory), который будет автоматически использоваться в вашем брандмауэре.
В вашем security.yaml вам не нужно указывать field: email
, так как поле формы сопоставляется с именем пользователявашим аутентификатором и InMemoryUserProvider не использует эту конфигурацию никоим образом.Это означает, например, что ваш getUser()
может выглядеть так:
public function getUser($credentials, UserProviderInterface $userProvider)
{
return $userProvider->loadUserByUsername($credentials['email']);
}
Остальная часть вашего аутентификатора выглядит хорошо для работы с этим.Вы должны быть осторожны в своем приложении, поскольку пользовательский класс, который вы получаете от провайдера, - это не сущность, а пользовательский класс по умолчанию, предоставляемый самой Symfony Symfony\Component\Security\Core\User\User
.
Раздел ваших провайдеров в security.yaml
, вероятно, должен выглядеть в документах (каждый пользователь содержит только password
и roles
), а в брандмауэре вы можете ссылаться на провайдера, используя provider: 'in_memory'
(или любое другое имя, выбранное вами для провайдера).