Symfony5 аутентификация это 2 провайдера безопасности - PullRequest
0 голосов
/ 19 июня 2020

Я использую два объекта User (пользователи сайта) и Official (рабочие с доступом к защищенной части сайта) для хранения пользователей. Все пользователи хранят в Doctrine. Поставщики конфигурации I в security.yaml

security:
    encoders:
        App\Entity\User:
            algorithm: auto
        App\Entity\Official:
            algorithm: auto

    providers:

        app_user_provider:
            entity:
                class: App\Entity\User
                property: email

        app_official_provider:
            entity:
                class: App\Entity\Official
                property: email
        all_users:
            chain:
                providers: ['app_user_provider','app_official_provider']

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            anonymous: true
            pattern: ^/
            lazy: true
            provider: all_users
            guard:
                authenticators:
                    - App\Security\LoginFormAuthenticator
            logout:
                path: app_logout

Пользователи из App\Entity\User прошли аутентификацию, но аутентификация пользователей из App\Entity\Official завершилась неудачно с ошибкой «Не удалось найти электронную почту».

I решите создать другую форму входа и перенастроить security.yaml

security:
    encoders:
        App\Entity\User:
            algorithm: auto
        App\Entity\Official:
            algorithm: auto

    providers:

        app_user_provider:
            entity:
                class: App\Entity\User
                property: email

        app_official_provider:
            entity:
                class: App\Entity\Official
                property: email
        all_users:
            chain:
                providers: ['app_user_provider','app_official_provider']
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        admin:
            anonymous: false
            pattern: ^/admin
            guard:
                authenticators:
                    - App\Security\AdminLoginFormAuthenticator
            provider: app_official_provider
            logout:
                path: admin_app_logout
        main:
            anonymous: true
            pattern: ^/
            lazy: true
            provider: all_users
            guard:
                authenticators:
                    - App\Security\LoginFormAuthenticator
            logout:
                path: app_logout

Когда я перехожу к / a_login и пытаюсь войти, страница перезагружается ... в панели отладки я вижу, что пользователи аутентифицированы. Но когда я перехожу к / admin, страница перенаправляется на / a_login в dev.log, я вижу:

[2020-06-19T15:41:27.715605+03:00] security.DEBUG: Guard authenticator does not support the request. {"firewall_key":"main","authenticator":"App\\Security\\AdminLoginFormAuthenticator"} []
[2020-06-19T15:41:27.758297+03:00] security.DEBUG: Read existing security token from the session. {"key":"_security_main","token_class":"Symfony\\Component\\Security\\Guard\\Token\\PostAuthenticationGuardToken"} []
[2020-06-19T15:41:27.817178+03:00] doctrine.DEBUG: SELECT t0.id AS id_1, t0.email AS email_2, t0.roles AS roles_3, t0.password AS password_4, t0.fam AS fam_5, t0.im AS im_6, t0.ot AS ot_7, t0.department_id AS department_id_8, t0.post_id AS post_id_9 FROM official t0 WHERE t0.id = ? [2] []
[2020-06-19T15:41:27.824179+03:00] security.DEBUG: User was reloaded from a user provider. {"provider":"Symfony\\Bridge\\Doctrine\\Security\\User\\EntityUserProvider","username":"test_w@test.com"} []

Что я могу сделать, чтобы это исправить?

...