将两个实体与FOSUserBundle一起使用时,按用户名或电子邮件记录

时间:2018-10-15 07:36:33

标签: symfony yaml fosuserbundle

我正在将FOSUSerBundle与两个不同的实体用于不同的用户,例如 DefaultUser和AdminUser

因此,我在security.yaml中有以下内容

    providers:
    user:
        entity:
            class: AppBundle:User
            property: 'email'
    admin:
        entity:
            class: AppBundle:Admin
            property: 'email'

并且防火墙设置如下:

 admin:
            pattern: ^/admin
            anonymous: ~
            provider: admin
            form_login:
                login_path: /admin/login
                csrf_token_generator: security.csrf.token_manager
                default_target_path: /admin
                check_path: admin_login_check
            logout_on_user_change: true
            logout:
                path: /admin/logout
                target: /admin
                invalidate_session: false
            access_denied_handler: AppBundle\Security\AccessDeniedHandler
            context: application

        main:
            pattern: ^/
            provider: user
            logout_on_user_change: true

            form_login:
#                csrf_token_generatlor: security.csrf.token_manager
                login_path: /login
                default_target_path: /user
                check_path: fos_user_security_check
            logout:
                  path:           user_logout
                  target:         user_login
                  invalidate_session: false

            context:         application
            anonymous:    ~
            access_denied_handler: AppBundle\Security\AccessDeniedHandler

如何获得FOSUserBundle的工作,以便我可以使用用户名或电子邮件?

通常由

设置
id: fos_user.user_provider.username_email

但是不能在此配置中使用。

1 个答案:

答案 0 :(得分:1)

我使用fos_userbundle已有很长时间了,但是从我在代码中看到的来看,您需要更新security.yml文件以使用它:

security:
    providers:
        fos_userbundle_admin: appbundle.service.providing.admin_user

在该服务(扩展了FOS\UserBundle\Security\UserProvider)中,您将要覆盖findUser($username)方法。在那里,您可以使用提供的用户名。

我想(未经测试)您可以创建另一个提供程序(fos_userbundle_user),并将其用于防火墙中的用户。

希望这是有道理的。它在这里工作,但是在symfony 2.8应用程序中。从那以后,FOS_UserBundle发生了一些变化。