Symfony5认证这2个安全提供者

时间:2020-06-19 12:54:10

标签: authentication doctrine-orm symfony5

我使用两个实体User(站点的用户)和Official(对站点具有受保护部分的访问权限的工人) 存储用户。 所有用户都存储在Doctrine中。 security.yaml中的I config提供程序

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的用户身份验证失败,并显示错误“找不到电子邮件”。

我决定创建另一个登录表单并重新配置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"} []

该如何解决?

0 个答案:

没有答案