2015-08-14 42 views
2

我的應用程序有問題。我爲每個部分設置了三個防火牆。一個用於後端,一個用於前端,一個用於Extranet部分。他們都有相同的用戶提供商(FOSUserBundle),它工作正常,直到我添加一個新的防火牆(外聯網)。現在,在這個防火牆中,當我嘗試訪問domain.com/extranet/時,我得到一個無限循環,但其他防火牆正常工作。Symfony2多個防火牆循環錯誤其中之一

這裏是我的配置:

security.yml

firewalls: 
extranet: 
    pattern: /extranet(.*) 
    form_login: 
     provider: fos_userbundle 
     login_path:  extranet_login 
     check_path:  extranet_login_check 
     default_target_path: extranet_home 
    logout: 
     path:   extranet_login_logout 
     target:   page_home 
    anonymous: false 
    security:  true 
    context:  application 
    remember_me: 
     key: XXXXXXX 
     lifetime: 86400 
admin: 
    pattern: /admin(.*) 
    form_login: 
     provider: fos_userbundle 
     login_path:  admin_login 
     check_path:  admin_login_check 
     default_target_path: admin_home 
    logout: 
     path:   admin_logout 
     target:   page_home 
    anonymous: true 
    security:  true 
    context:  application 
    remember_me: 
     key: XXXXXXX 
     lifetime: 86400 
main: 
    pattern: ^/ 
    form_login: 
     provider: fos_userbundle 
     csrf_provider: form.csrf_provider 
    logout:  true 
    anonymous: true 
    security:  true 
    context: application 
    remember_me: 
     key: XXXXXXX 
     lifetime: 86400 

ACCESS_CONTROL:

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

- { path: ^/extranet/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
- { path: ^/extranet/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
- { path: ^/extranet/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY } 

- { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
- { path: ^/admin/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
- { path: ^/admin/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY } 

- { path: ^/admin/, role: ROLE_ADMIN } 
- { path: ^/extranet/, role: ROLE_DISTRIBUTOR } 

的routing.yml

#Login 
login_check: 
    pattern: /login_check 

logout: 
    pattern: /logout 

#extranet login 
extranet_login: 
    pattern: /extranet/login 
    defaults: { _controller: FOSUserBundle:Security:login } 

extranet_login_check: 
    pattern: /extranet/login_check 
    defaults: { _controller: FOSUserBundle:Security:check } 

extranet_logout: 
    pattern: /extranet/logout 
    defaults: { _controller: FOSUserBundle:Security:logout } 

#admin login 
admin_login: 
    pattern: /admin/login 
    defaults: { _controller: FOSUserBundle:Security:login } 

admin_login_check: 
    pattern: /admin/login_check 
    defaults: { _controller: FOSUserBundle:Security:check } 

admin_logout: 
    pattern: /admin/logout 
    defaults: { _controller: FOSUserBundle:Security:logout } 

最後,我的安全控制器。

class SecurityController extends BaseController 
{ 
    /** 
    * {@inheritDoc} 
    */ 
    public function renderLogin(array $data) 
    { 
     $requestAttributes = $this->container->get('request')->attributes; 

     if ('admin_login' === $requestAttributes->get('_route')) { 
      $template = sprintf('WebBundle:Backend:login.html.twig'); 
     } elseif ('extranet_login' === $requestAttributes->get('_route')) { 
      $template = sprintf('WebBundle:Extranet:login.html.twig'); 
     } else { 
      $template = sprintf('FOSUserBundle:Security:login.html.twig'); 
     } 

     return $this->container->get('templating')->renderResponse($template, $data); 
    } 
} 

什麼可能是錯的?我嘗試了很多變化,但當我修復時,另一個失敗...

先謝謝您!

+2

你爲什麼在extranet防火牆中定義了'anonymous:false'? –

+0

@DanMironis這是...我做錯了複製和粘貼!我現在正在測試,但我認爲它已經解決了! – David

回答

2

正如Dan Mironis所說,問題是我在外聯網防火牆中設置了anonymous:false。我改變它爲真,現在看起來它正在工作。謝謝!

+0

很高興幫助:) –