2013-08-30 25 views
0

我嘗試了symfony食譜並專門嘗試安全性章節。我security.yml和使用routing.yml如下:Symfony的安全食譜yml示例並不保護防火牆後面的login_check

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上有類似的問題,但我無法理解他們的解決方案,它不適用於我,謝謝。爲什麼login_check不在防火牆後面?我認爲它會落後於secured_area,因爲該模式是^/,這明顯匹配/login_check

我的理解問題:anonymous ~究竟是做什麼的?

回答

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

你的答案是FOSUSerBundle 有在控制器

+1

Sry,這與FOSUserBundle無關。我不使用它。 – tester