Как включить вход в систему с помощью электронной почты и имени пользователя с помощью FOSUserBundle и FOSOAuthServerBundle в Symfony

С конфигурацией по умолчанию вашего userbundle, доступной в руководстве по установке в официальном репозитории FOSUserBundle, вам потребуется имя пользователя, ваш адрес электронной почты и пароль, чтобы зарегистрироваться в модуле default / register.

Вход в систему по умолчанию после вашей регистрации может быть легко достигнут с помощью имени пользователя и пароля. Но если вы попытаетесь войти по электронной почте, ответом вашей формы будет неудобное сообщение об ошибке «учетные данные неверны», хотя при вводе правильной учетной записи электронной почты это сообщение будет появляться снова и снова.

Или, если ваш oAuth api использует FOSUserBundle в качестве провайдера пользователя по умолчанию, и вы пытаетесь использовать пароль grant_type (отправка учетных данных пользователя в параметрах), возвращается сообщение об ошибке аутентификации, поскольку ваш параметр username является адресом электронной почты пользователя.

Эта проблема может быть легко решена изменением свойства провайдера пользователя в вашем security.yml файл (и config.yml если вы используете FOSOAuthServerBundle).

FOSUserBundle

Обновите свойство fos_userbundle в поставщиках вашего security.yml файл:

security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN:       ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
#  Your id property should look like :
#   id: fos_user.user_provider.username
#  Change to
id: fos_user.user_provider.username_email

После этого вы сможете войти с электронной почтой и именем пользователя из стандартных или настроенных форм входа.

FOSOAuthServerBundle

Обновите свойство user_provider в конфигурации config.yml файл.

fos_oauth_server:
db_driver: orm
client_class:        easymedic\apiBundle\Entity\Client
access_token_class:  easymedic\apiBundle\Entity\AccessToken
refresh_token_class: easymedic\apiBundle\Entity\RefreshToken
auth_code_class:     easymedic\apiBundle\Entity\AuthCode
# Your actual service> user_provider property, should look like
#service:
#    user_provider: fos_user.user_provider.username
# Change it for
service:
user_provider: fos_user.user_provider.username_email

Затем вы сможете войти в свой проект с именем пользователя или электронной почтой (канонической электронной почтой) в аутентификации через API (пароль oauth tokens grant_type).

Ссылка на основную публикацию