好吧,我认为我需要手握..
这个问题是上一个问题的后续内容:
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
下。这也适用于开发环境中的探查器和工具栏(实际上对于FOSUserBundle,但我认为这对于LdapBundle也很重要)。是的,我知道symfony文档说专门为^/login$
创建一个匿名防火墙,但是如果捆绑包支持匿名角色,则足以使用上述acces_control排除它。 - { path: ^/_wdt, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/_profiler, role: IS_AUTHENTICATED_ANONYMOUSLY }
编辑:
并且不要忘记从包中导入路由定义,也不要自行定义它们。见https://github.com/BorisMorel/LdapBundle#import-routing