【问题标题】:Symfony 4 : How to have multi providers for user/admin in firewall?Symfony 4:如何在防火墙中为用户/管理员提供多个提供者?
【发布时间】:2019-05-16 10:46:19
【问题描述】:

我不能使用两种不同的表单为用户和管理员提供两个不同的提供程序

我想为用户和管理员设置两个防火墙。我创建了两个不同的提供者链接两个不同的实体。我可以以用户身份登录,但不能以管理员身份登录。我不明白我需要添加更多内容。

另外,我知道有app.user。但是还有 app.admin 吗?为了在两个不同的防火墙上拥有两个完全独立的帐户?

security:
providers:
    user_provider:
        entity:
            class: App\Entity\User
            property: username
    admin_provider:
        entity:
            class: App\Entity\Admin
            property: username
    chain_provider:
        chain:
            providers: [user_provider, admin_provider]
firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    main:
        pattern: ^/
        provider: user_provider
        anonymous: true
        logout:
            path: /logout
            target: /login
        remember_me:
            secret:   '%kernel.secret%'
            lifetime: 604800 # 1 week in seconds
            path:     /
        form_login:
            login_path: /login
            check_path: /login
    backoffice:
        pattern: ^/backoffice
        provider: admin_provider
        logout:
            path: /backoffice/logout
            target: /backoffice/login
        form_login:
            login_path: /backoffice/login
            check_path: /backoffice/login
access_control:
    - { path: ^/backoffice/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/backoffice, roles: ROLE_ADMIN }
    - { path: ^/mon-compte, roles: ROLE_USER }
encoders:
    App\Entity\User:
        algorithm: bcrypt
        cost: 12
    App\Entity\Admin:
        algorithm: bcrypt
        cost: 12

当我调用$authenticationUtils->getLastAuthenticationError() 时出现null 错误

【问题讨论】:

    标签: symfony symfony-security symfony-4.2


    【解决方案1】:

    切换防火墙顺序,所以main 防火墙是最后一个。

    Symfony 每个请求只使用一个防火墙,它是第一个与pattern 匹配的防火墙。因此,在您的情况下,它也将main 防火墙用于^/backoffice url,因为/backoffice 匹配^/ 模式。

    我不确定它是否能解决您的所有问题,但您需要这样做才能真正使用backoffice 防火墙。

    关于app.userapp.admin - 不,没有app.admin。管理员也是一个用户,所以当你以管理员身份登录时,你会得到它的实体app.user

    【讨论】:

    • 谢谢你,它帮助了我!我在理解我的错误的同时阅读了您的答案。在我的手防火墙上,我有一个 user = test 在我的防火墙管理员上我有一个 user = admin 两者都可以存在于两个防火墙上。这对我来说是一件非常好的事情。还是非常感谢 !已解决!
    【解决方案2】:

    这是我更新的 security.yaml :

    security:
    providers:
        admin_provider:
            entity:
                class: App\Entity\Admin
                property: username
        user_provider:
            entity:
                class: App\Entity\User
                property: username
        chain_provider:
            chain:
                providers: [user_provider, admin_provider]
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        backoffice:
            pattern: ^/backoffice
            provider: admin_provider
            anonymous: true
            logout:
                path: admin.logout
                target: admin.login
            form_login:
                login_path: admin.login
                check_path: admin.login
                default_target_path: admin.index
        main:
            pattern: ^/
            provider: user_provider
            anonymous: true
            logout:
                path: logout
                target: login
            remember_me:
                secret:   '%kernel.secret%'
                lifetime: 604800 # 1 week in seconds
                path:     /
            form_login:
                login_path: login
                check_path: login
    access_control:
        - { path: ^/backoffice/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/backoffice, roles: ROLE_ADMIN }
        - { path: ^/mon-compte, roles: ROLE_USER }
    encoders:
        App\Entity\User:
            algorithm: bcrypt
            cost: 12
        App\Entity\Admin:
            algorithm: bcrypt
            cost: 12
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-20
      • 2015-09-26
      • 1970-01-01
      • 2015-01-19
      • 2014-03-21
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      相关资源
      最近更新 更多