好吧,我认为我需要手握..

这个问题是上一个问题的后续内容:
Symfony2 img/LdapBundle Bad credentials error

我将其拆分为另一个问题。我遇到了与security.yml文件相关的两个不同问题,如下所述。

我有我的security.yml:

security:
    firewalls:
        login_firewall:
            pattern:    ^/login$
            anonymous:  ~
            imag_ldap:
                check_path: login_check
                login_path: login
                csrf_provider: form.csrf_provider
                intention: authenticate
                provider: ldap
            logout:
                path:           /logout
                target:         /
        restricted_area:
            pattern:          ^/
            #anonymous:        ~
    providers:
        ldap:
           id: imag_ldap.security.user.provider

    encoders:
        IMAG\LdapBundle\User\LdapUser: plaintext

    access_control:
        - { path: ^/login,          roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/,               roles: IS_AUTHENTICATED_FULLY }


但是我收到以下错误:
LogicException: No authentication listener registered for firewall "restricted_area".

所以我尝试了以下方法:

security:
    firewalls:
        login_firewall:
            pattern:    ^/login$
            anonymous:  ~
            imag_ldap:
                check_path: login_check
                login_path: login
                csrf_provider: form.csrf_provider
                intention: authenticate
                provider: ldap
            logout:
                path:           /logout
                target:         /
        restricted_area:
            pattern:          ^/
            #anonymous:        ~
            imag_ldap:
                check_path: login_check
                login_path: login
                csrf_provider: form.csrf_provider
                intention: authenticate
                provider: ldap
            logout:
                path:           /logout
                target:         /


但这会导致重定向循环。

谁能告诉我如何使它工作?我正在尝试使用https://github.com/BorisMorel/LdapBundle ldap捆绑包对用户进行身份验证。

最佳答案

根据文档https://github.com/BorisMorel/LdapBundle#configure-securityyml,您应该有一个带有pattern: ^/的防火墙,并且登录也位于其中。

security:
    firewalls:
        restricted_area:
            pattern:    ^/
            anonymous:  ~
            imag_ldap:
                check_path: login_check
                login_path: login
                csrf_provider: form.csrf_provider
                intention: authenticate
                provider: ldap
            logout:
                path:           /logout
                target:         /
    providers:
        ldap:
           id: imag_ldap.security.user.provider

    encoders:
        IMAG\LdapBundle\User\LdapUser: plaintext

    access_control:
        - { path: ^/login$,         roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/,               roles: IS_AUTHENTICATED_FULLY }


不需要身份验证的网站必须包含在具有acces_control角色的IS_AUTHENTICATED_ANONYMOUSLY下。这也适用于开发环境中的探查器和工具栏(实际上对于FOSU​​serBundle,但我认为这对于LdapBundle也很重要)。是的,我知道symfony文档说专门为^/login$创建一个匿名防火墙,但是如果捆绑包支持匿名角色,则足以使用上述acces_control排除它。

    - { path: ^/_wdt, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/_profiler, role: IS_AUTHENTICATED_ANONYMOUSLY }


编辑:
并且不要忘记从包中导入路由定义,也不要自行定义它们。见https://github.com/BorisMorel/LdapBundle#import-routing

10-01 18:28