个性化阅读
专注于IT技术分析

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

使用官方FOSUserBundle存储库中的设置指南中提供的userbundle的默认配置, 你将需要一个用户名, 你的电子邮件和密码, 以便在默认的/ register模块中进行注册。

注册后使用用户名和密码可以轻松实现默认登录。但是, 如果你尝试使用电子邮件登录, 尽管你输入了正确的电子邮件帐户, 但表单的响应将是一个令人不舒服的”凭据无效”错误消息, 该消息将一次又一次地出现。

或者, 如果你的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密码)通过身份验证中的用户名或电子邮件(规范电子邮件)登录到你的项目。

赞(0)
未经允许不得转载:srcmini » 如何在Symfony中使用FOSUserBundle和FOSOAuthServerBundle启用电子邮件和用户名登录

评论 抢沙发

评论前必须登录!