无法找到路径“/ login_check”的控制器 - symfony2

时间:2014-01-06 12:34:57

标签: php symfony authentication login

我知道这是一个常见的问题。关于这个主题的几个问题已经发布。 我已尝试过在这些问题中推荐的所有解决方案,但都没有效果。

我发现如果我将form_login放在firewall后面会出现此问题。但是我在防火墙中没有任何额外的层,所以路径应该很简单,如文档中所述。

我的 security.yml

# app/config/security.yml
security:
    encoders:
        Joy\JoyBundle\Entity\User:
            algorithm:        sha512
            encode_as_base64: true
            iterations:       1

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        administrators:
            entity: { class: JoyBundle:User, property: username }

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false

        login:
            pattern:  ^/login
            security: false

        secured_area:
            pattern: ^/
            anonymous: ~
            form_login:
                login_path: login
                check_path: login_check
            logout:
                path:   /logout
                target: /login

    access_control:
        - { path: ^/signup, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: ROLE_ADMIN }

app/config

中的 routing.yml
# app/config/routing.yml
login:
    path: /login
    defaults: { _controller: JoyBundle:Security:login }

login_check:
    path: /login_check

joy_hello:
    resource: "@JoyBundle/Resources/config/routing.yml"
    prefix: /

所以我在访问app_dev.php/时正在执行登录检查但是在登录表单中按提交后显示错误。

  

无法找到路径“/ login_check”的控制器。可能是你   忘了在路由配置中添加匹配的路由? 404   找不到 - NotFoundHttpException

我试过

login_path: /login
check_path: /login_check

没用。我错过了什么?请帮忙.....

2 个答案:

答案 0 :(得分:6)

路由login_check不在防火墙后面,因为login_check路由模式与没有安全性的login防火墙匹配。

login:
    pattern:  ^/login     # This matches /login_check
    security: false

解决方案1:将其更改为

login:
    pattern:  ^/login$
    security: false

解决方案2:完全删除login防火墙并将此规则添加到access_control

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

答案 1 :(得分:0)

security.yml 中尝试在secured_area部分设置提供商:

secured_area:
    provider: administrators
    pattern: ^/
    anonymous: ~