Вход по имени пользователя или электронной почте при использовании двух объектов с FOSUserBundle - PullRequest
0 голосов
/ 15 октября 2018

Я использую 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 голосов
/ 15 октября 2018

Прошло много времени с тех пор, как я работал с 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 немного изменился.

...