0

我尝试了 symfony 食谱并特别尝试了安全章节。我的 security.yml 和 routing.yml 如下:

安全性.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 }

路由.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 上有类似的问题,但我无法理解他们的解决方案,而且它对我不起作用,抱歉。为什么login_check不在防火墙后面?我认为它会落后,secured_area因为模式是^/并且这显然匹配/login_check

我的理解问题:到底anonymous ~是做什么的?

4

2 回答 2

1

我自己发现了。

安全性.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: ~因此无需为login和声明额外的防火墙register

于 2013-08-30T20:38:08.303 回答
-1

你的答案在 FOSUSerBundle 控制器中有虚假动作

于 2013-08-30T19:58:04.250 回答