2011-09-25 36 views
0

我是symfony和twig的新手,我對安全,防火牆和模板感到頭痛。Symfony2 + Twig:爲已認證用戶和匿名用戶使用模板

我想要做的是有一個「基本」模板,顯示一個頂欄。如果用戶未登錄,我希望此頂欄顯示「您未登錄」,如果用戶登錄,則顯示「歡迎用戶U」消息。 因爲這一點,我把一個

{% if is_granted('IS_AUTHENTICATED_FULLY') %} 

在「基地」模板記錄和匿名用戶進行區分,但我對安全上下文令牌的問題。

我的公共路徑(而不是由防火牆來保證安全)是:

/myapp/ 
/myapp/home 
/myapp/about 
/myapp/help 

,後來有一些路徑,行爲纔可以訪問身份驗證的用戶:

/myapp/action1 
/myapp/action2 
... 
/myapp/actionN 

的問題是,一旦用戶記錄在我的「基地」中,在action1,...,actionN的視圖中顯示歡迎消息,但當用戶轉到「家庭」或「幫助」頁面時,消息是「您未登錄」。

有些人有類似的情況?你是如何解決它的?你的路由器和安全文件如何配置?

回答

2

防火牆不共享安全上下文。所以當一個動作不在防火牆後面時,你無法訪問用戶信息。試着將整個應用程序在防火牆後面(並允許匿名用戶):

firewalls: 
    secured_area: 
     pattern: ^/ 
     anonymous: ~ 
     form_login: 
      check_path: /login_check 
      login_path: /login 
     logout: 
      path: /logout 
      target:/
access_control: 
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/action, roles: ROLE_USER } 

確保login_path可以通過匿名用戶訪問。