我是 Symfony2 的新手,我正在尝试创建一个基本的注册+登录系统。因此,在 Symfony2 文档的帮助下,我创建了这个 security.yml:
security:
encoders:
TestCompany\InternetBundle\Entity\Member:
algorithm: sha1
encode_as_base64: false
iterations: 1
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]
providers:
administrators:
entity: { class: TestCompanyInternetBundle:Member, property: username }
firewalls:
admin_area:
pattern: ^/admin
anonymous: ~
form_login:
login_path: /login
check_path: /login_check
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
我使用了这个路由:
login_check:
pattern: /login_check
login:
pattern: /login
defaults: { _controller: TestCompanyInternetBundle:Admin:login }
根据http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form我不需要为 login_check 路由实现控制器。然而,Symfony 返回了这个错误给我:
Unable to find the controller for path "/login_check". Maybe you forgot to add the matching route in your routing configuration?
你看到我在这里做错了什么吗?登录页面几乎是文档中使用的页面的精确副本。页面出现错误:http://localhost/SymfonyTest/web/app_dev.php/login_check
,这是我使用登录表单后发送到的页面。
http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form
Be sure /login_check
位于防火墙后面。
因此,在您的示例中,您为安全区域指定了 /admin 前缀,因此您的登录检查路由也应该具有该前缀,例如/管理/登录检查
接下来,确保您的 check_path URL(例如 /login_check)位于用于表单登录的防火墙后面(在此示例中,单个防火墙匹配所有 URL,包括 /login_check)。如果 /login_check 与任何防火墙都不匹配,您将收到无法找到路径“/login_check”的控制器异常。
Example security.yml
配置:
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
secured_area:
pattern: ^/
form_login:
login_path: /login
check_path: /login_check
logout:
path: /demo/secured/logout
target: /demo/
anonymous: ~
....
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)