如何从SonataAdmin身份验证器连接到其他身份验证器?

时间:2019-06-21 10:07:34

标签: php symfony authentication symfony4 symfony-security

我有一个symfony应用程序,该应用程序在Sonata Admin Bundle中具有用于管理部分的功能,它具有自己的防火墙(admin)和用于应用程序的用户部分的防火墙(main)。 / p>

目前,与Sonata连接的管理员无法访问为该用户设计的API,因为它已针对Sonata Admin Bundle身份验证器进行了身份验证,对于该API,它将其视为空用户或未通过身份验证一。

我想允许管理员访问为用户部分防火墙后面的应用程序部分制作的API。

security.yaml文件中配置防火墙:

 firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        admin:
            pattern:            ^/admin(.*)
            form_login:
                provider:       app_user_admin
                login_path:     admin_login
                use_forward:    false
                check_path:     admin_login
                failure_path:   null
            logout:
                path:           admin_logout
                target:         admin_login
            anonymous:          true
            guard:
                authenticators:
                    - App\Security\AdminLoginAuthenticator
        main:
            anonymous: true
            logout:
                path:   security_logout
            guard:
                authenticators:
                    - App\Security\UserLoginAuthenticator

是否可以为管理员连接两个身份验证器?就像,成功登录后,管理员可以调用main防火墙的身份验证器吗?

1 个答案:

答案 0 :(得分:0)

经过一番挖掘和一些帮助,我发现symfony安全具有内置的类似功能。

它叫Symfony context,并且做的完全一样。

这是您真正需要添加到配置文件中的内容,以供将来参考:

firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        admin:
            context: just_a_random_name
            pattern:            ^/admin(.*)
            form_login:
                provider:       app_user_admin
                login_path:     admin_login
                use_forward:    false
                check_path:     admin_login
                failure_path:   null
            logout:
                path:           admin_logout
                target:         admin_login
            anonymous:          true
            guard:
                authenticators:
                    - App\Security\AdminLoginAuthenticator
        main:
            context: just_a_random_name
            anonymous: true
            logout:
                path:   security_logout
            guard:
                authenticators:
                    - App\Security\UserLoginAuthenticator