Symfony的安全食谱yml示例不保护login_check在防火墙后面

时间:2013-08-30 19:21:54

标签: security authentication symfony configuration routing

我尝试使用symfony cookbook并专门尝试安全章节。我的security.yml和routing.yml如下:

security.yml:

security:
    encoders:
        Acme\UserBundle\Entity\User:
            algorithm: sha1
            encode_as_base64: false
            iterations: false

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

    providers:
        administrators:
            entity: { class: AcmeUserBundle:User, property: email }

    firewalls:
        login_firewall:
            pattern: ^/login
            anonymous: ~
        register_area:
            pattern: ^/register
            anonymous: ~
        secured_area:
            pattern: ^/
            anonymous: ~
            form_login: ~

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

的routing.yml:

login:
    pattern: /login
    defaults: { _controller: AcmeUserBundle:Account:login }
login_check:
    pattern: /login_check

一切正常,但login_check表示无法找到控制器。这正是陷阱没有。 3在这里说: http://symfony.com/doc/current/book/security.html#book-security-common-pitfalls

所以我不确定我做错了什么。我知道在Stackoverflow上有类似的问题,但我无法理解他们的解决方案,它对我不起作用,sry。为什么login_check不在防火墙后面?我认为它会落后于secured_area,因为模式为^/,这显然与/login_check匹配。

我的理解问题:anonymous ~究竟做了什么?

2 个答案:

答案 0 :(得分:1)

自己找到它。

<强> security.yml:

security:
    encoders:
        Acme\UserBundle\Entity\User:
            algorithm: sha1
            encode_as_base64: false
            iterations: false

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

    providers:
        administrators:
            entity: { class: AcmeUserBundle:User, property: email }

    firewalls:
        secured_area:
            pattern: ^/
            anonymous: ~
            form_login: ~

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

由于secured_area已经有anonymous: ~,因此无需为loginregister声明额外的防火墙。

答案 1 :(得分:-1)

您的回答是在FOSUSerBundle中 控制器中有假动作