Php Symfony2.1:找不到路径“的控制器”/登录“检查”;
我使用symfony.com上的教程认证我的用户。通过一个简单的http身份验证,它工作得非常好 提交登录后,我收到此异常: 找不到路径“/login\u check”的控制器。也许你 忘记在路由配置中添加匹配的路由 在教程中我读到: 您不需要为/login\u check URL实现控制器,因为防火墙将自动捕获并处理提交到此URL的任何表单 我定义了路由并设置了防火墙设置: security.ymlPhp Symfony2.1:找不到路径“的控制器”/登录“检查”;,php,symfony,symfony-2.1,Php,Symfony,Symfony 2.1,我使用symfony.com上的教程认证我的用户。通过一个简单的http身份验证,它工作得非常好 提交登录后,我收到此异常: 找不到路径“/login\u check”的控制器。也许你 忘记在路由配置中添加匹配的路由 在教程中我读到: 您不需要为/login\u check URL实现控制器,因为防火墙将自动捕获并处理提交到此URL的任何表单 我定义了路由并设置了防火墙设置: security.yml firewalls: dev: pattern: ^/(_(prof
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
backend:
pattern: ^/backend
anonymous: ~
form_login:
provider: entity
login_path: /login
check_path: /login_check
#use_forward: true
logout:
path: /logout
target: /
login:
pattern: /login
defaults: { _controller: VitaSecurityBundle:Default:login }
login_check:
pattern: /login_check
logout:
pattern: /logout
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login_firewall:
pattern: ^/backend/login$
anonymous: ~
backend:
pattern: ^/backend
form_login:
provider: entity
login_path: /backend/login
check_path: /backend/login_check
#use_forward: true
logout:
path: /backend/logout
target: /
access_control:
#- { path: ^/backend, roles: ROLE_USER }
login:
pattern: /backend/login
defaults: { _controller: VitaSecurityBundle:Default:login }
login_check:
pattern: /backend/login_check
logout:
pattern: /backend/logout
routing.yml
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
backend:
pattern: ^/backend
anonymous: ~
form_login:
provider: entity
login_path: /login
check_path: /login_check
#use_forward: true
logout:
path: /logout
target: /
login:
pattern: /login
defaults: { _controller: VitaSecurityBundle:Default:login }
login_check:
pattern: /login_check
logout:
pattern: /logout
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login_firewall:
pattern: ^/backend/login$
anonymous: ~
backend:
pattern: ^/backend
form_login:
provider: entity
login_path: /backend/login
check_path: /backend/login_check
#use_forward: true
logout:
path: /backend/logout
target: /
access_control:
#- { path: ^/backend, roles: ROLE_USER }
login:
pattern: /backend/login
defaults: { _controller: VitaSecurityBundle:Default:login }
login_check:
pattern: /backend/login_check
logout:
pattern: /backend/logout
以下是我在实际项目中使用的示例代码:
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
secured_area:
pattern: ^/cmd
anonymous: ~
form_login:
check_path: /cmd/login_check
login_path: /cmd/login
remember_me:
always_remember_me: true
key: "%secret%"
path: /cmd
domain: ~ # Defaults to the current domain from $_SERVER
logout:
path: /cmd/logout
target: /
admin:
pattern: ^/admin
http_basic:
realm: "Administration"
free_area:
pattern: ^/
anonymous: ~
在我的例子中,只有/cmd/part是安全的,/admin/part也是安全的,但是使用HTTP安全性
也许你应该试试:
security.yml
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
backend:
pattern: ^/backend
anonymous: ~
form_login:
provider: entity
login_path: /backend/login
check_path: /backend/login_check
#use_forward: true
logout:
path: /backend/logout
target: /
截至routing.yml:
login:
pattern: /backend/login
defaults: { _controller: VitaSecurityBundle:Default:login }
login_check:
pattern: /backend/login_check
logout:
pattern: /backend/logout
我认为您的问题可能是由于您的/部分没有激活安全性(您的安全区域的模式是^/后端)我找到了解决问题的方法
我在路径中添加了/backend前缀,删除了“匿名:~”行,并注释掉了backend的ACL
security.yml
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
backend:
pattern: ^/backend
anonymous: ~
form_login:
provider: entity
login_path: /login
check_path: /login_check
#use_forward: true
logout:
path: /logout
target: /
login:
pattern: /login
defaults: { _controller: VitaSecurityBundle:Default:login }
login_check:
pattern: /login_check
logout:
pattern: /logout
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login_firewall:
pattern: ^/backend/login$
anonymous: ~
backend:
pattern: ^/backend
form_login:
provider: entity
login_path: /backend/login
check_path: /backend/login_check
#use_forward: true
logout:
path: /backend/logout
target: /
access_control:
#- { path: ^/backend, roles: ROLE_USER }
login:
pattern: /backend/login
defaults: { _controller: VitaSecurityBundle:Default:login }
login_check:
pattern: /backend/login_check
logout:
pattern: /backend/logout
routing.yml
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
backend:
pattern: ^/backend
anonymous: ~
form_login:
provider: entity
login_path: /login
check_path: /login_check
#use_forward: true
logout:
path: /logout
target: /
login:
pattern: /login
defaults: { _controller: VitaSecurityBundle:Default:login }
login_check:
pattern: /login_check
logout:
pattern: /logout
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login_firewall:
pattern: ^/backend/login$
anonymous: ~
backend:
pattern: ^/backend
form_login:
provider: entity
login_path: /backend/login
check_path: /backend/login_check
#use_forward: true
logout:
path: /backend/logout
target: /
access_control:
#- { path: ^/backend, roles: ROLE_USER }
login:
pattern: /backend/login
defaults: { _controller: VitaSecurityBundle:Default:login }
login_check:
pattern: /backend/login_check
logout:
pattern: /backend/logout
您遇到的问题如下所述: 请参阅“避免常见陷阱”一节
/login\u check
位于防火墙后面
接下来,确保检查路径URL(例如/login\u检查)位于用于表单登录的防火墙后面(在本例中,单个防火墙匹配所有URL,包括/login\u检查)。如果/login\u check与任何防火墙都不匹配,您将收到无法找到路径“/login\u check”的控制器的异常因此,为了匹配您在防火墙中指定的模式,请将登录检查放在如下url路径上:/backend/login\u check这对我不起作用,我尝试了其他方法:
firewalls:
dev:
pattern: ^/(_profiler|_wdt|css|js)
security: false
login:
pattern: ^/login$
security: false
secured_area:
pattern: /(admin/.*|login_check)
provider: in_memory
form_login:
check_path: /login_check
login_path: /login
default_target_path: /admin
always_use_default_target_path: true
logout:
path: /logout
target: /
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_ADMIN }
下面的解释比zabojad的解释更简单。
重要的是把登录检查路由放在防火墙内,让登录在防火墙外。有了一个好的模式,你就可以成功
Max当您有两个具有相同模式的防火墙时,问题也会发生。例如:
....
backend:
pattern: ^/*
....
frontend:
pattern: ^/*
您必须更改以下两个选项之一:
....
backend:
pattern: ^/(administrador|backend)/*
....
frontend:
pattern: ^/*
登录表单是否仅允许访问后端?是的,这仅适用于后端userNice解决方案。我也有同样的问题。你应该发布你的解决方案作为答案,然后接受它。比它更容易找到。:)谢谢我试了一点,发现了一个解决方案(我编辑了我的初始帖子)很好。google groups post的Christophe Coevoit还表示:“只有当请求与防火墙模式匹配时,才会附加安全侦听器。因此,您需要使用表单/admin/logout的url才能在侦听器的范围内。”新手错误/gotcha:请注意,如果您有^/和^/admin,并且需要两个登录表单,更具体的模式(^/admin)必须在文件中更一般的模式^/之上,否则它将不会优先,因为^/仍然可以匹配^/admin-至少,这就是为什么我的应用程序最终实现了这一点,因为我需要两个登录表单,并且在security.yml中已经有了一个^/模式,我没有意识到这就是yml处理regex优先级的方式。