如何在Symfony中使用FOSUserBundle和FOSOAuthServerBundle启用电子邮件和用户名登录

使用官方FOSUserBundle存储库中的设置指南中提供的userbundle的默认配置, 你将需要一个用户名, 你的电子邮件和密码, 以便在默认的/ register模块中进行注册。
注册后使用用户名和密码可以轻松实现默认登录。但是, 如果你尝试使用电子邮件登录, 尽管你输入了正确的电子邮件帐户, 但表单的响应将是一个令人不舒服的” 凭据无效” 错误消息, 该消息将一次又一次地出现。
【如何在Symfony中使用FOSUserBundle和FOSOAuthServerBundle启用电子邮件和用户名登录】或者, 如果你的oAuth api使用FOSUserBundle作为默认用户提供程序, 并且你尝试使用grant_type密码(在参数中发送用户凭据), 则会返回身份验证错误消息, 因为你的username参数是用户的电子邮件。
更改security.yml文件(如果使用FOSOAuthServerBundle, 则为config.yml)中的用户提供程序属性, 可以轻松解决此问题。
在security.yml文件的提供程序中更新fos_userbundle属性:

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

然后, 你将能够使用默认或自定义登录表单中的电子邮件和用户名登录。
在config.yml文件的配置中更新user_provider属性。
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令牌grant_type密码)通过身份验证中的用户名或电子邮件(规范电子邮件)登录到你的项目。

    推荐阅读