2012-04-15 52 views
3

我想弄清楚如何擁有兩個單獨的登錄頁面:默認登錄頁面爲.com頁面,特定用戶爲默認登錄頁面,例如路徑爲/specialSymfony 2中的兩個單獨的登錄頁面

在一個SF2項目中這很容易實現嗎?

UPDATE:

我在防火牆的配置如下(我使用fosub)

providers: 
    custom: 
     id: ib.user_provider 
    fos_userbundle: 
     id: fos_user.user_manager 
    my_fos_facebook_provider: 
     id: my.facebook.user 

firewalls: 
    special: 
     pattern: ^/special 
     form_login: 
      provider: fos_userbundle 
      login_path: /special/login 
      check_path: /special/login_check 
      use_referer: false 
      default_target_path: /special 
      success_handler: ib.login_handler 
      provider: custom 
    main: 
     pattern: ^/.* 
     form_login: 
      provider: fos_userbundle 
      login_path: /login 
      check_path: /login_check 
      use_referer: false 
      default_target_path:/
      provider: custom 
     fos_facebook: 
      always_use_default_target_path: true 
      app_url: "http://apps.facebook.com/%facebook_app_id%/" 
      server_url: "http://aw.com/aw/web/app_dev.php/" 
      login_path: /login 
      check_path: /login_check/facebook 
      default_target_path: /checkFB 
      success_handler: facebook_auth_success_handler 
      provider: my_fos_facebook_provider 
     logout: 
      #handlers: ["fos_facebook.logout_handler"] 
      target:/
     anonymous: ~ 

在ib.login_handler我有以下幾點:

public function onAuthenticationSuccess(Request $request,TokenInterface $token) 
{ 
    if ($this->security->isGranted('ROLE_CATEGORIZER')) 
    { 
     $response = new RedirectResponse($this->router->generate('MyCoBundle_mailAdmin_index')); 
    } 


    return $response; 
} 

隨着這種配置,如果我去mydomain.com/special我得到以下錯誤:Fehler:Umleitungsfehler(英文:錯誤:重定向錯誤)

UPDATE:

在鉻我得到:未找到 「GET /特/登錄」

404 Not Found - NotFoundHttpException 
1 linked Exception: ResourceNotFoundException » 

路線我沒有這個登錄路徑一種特殊的路由。我想實現的只是一個特殊用戶只能訪問路徑/ special下的頁面。

回答

8

這是可能的,你可以定義許多保護區=>許多防火牆。

讓我們來看看這個應用程序/配置/ security.yml配置要懂得:

firewalls: 

    dev: 
     pattern: ^/(_(profiler|wdt)|css|images|js)/ 
     security: false 

    special_area: 
     pattern: ^/special 
     anonymous: ~ 
     form_login: 
      check_path: /special/login_check 
      login_path: /special/login 
     logout: 
      path: /special/logout 
      target:/

    general_area: 
     pattern:^
     anonymous: ~ 
     form_login: 
      check_path: /login_check 
      login_path: /login 
     logout: 
      path: /logout 
      target:/


access_control: 
    - { path: ^/_internal, role: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 } 

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

當心special_area必須以上genereal_area因爲general_area的圖案中的每個其他的一致定義。 ..

必須添加到您的包routing.yml:

_security_login_special: 
    pattern: /special/login 
    defaults: { _controller: FOSUserBundle:Security:login } 

_security_check_special: 
    pattern: /special/login_check 

_security_logout_special: 
    pattern: /special/logout 

而且你要添加的general_area另一個角色,所以你需要重寫FOSUserManager並使其對用戶負荷增加這個補充作用......(點擊此處瞭解詳情:https://github.com/FriendsOfSymfony/FOSUserBundle/blob/1.2.0/Resources/doc/user_manager.md

+0

您好,感謝您發佈。不幸的是,我在嘗試上述設置時遇到錯誤。也許我應該發佈我的防火牆配置上面。 – ramo 2012-04-16 11:38:03

+0

嗨,請發佈整個錯誤信息;)在英語中,我的德語已經在慕尼黑的Oktoberfet期間被繪製;)/ login和/ special/login是否對應於路由中的任何路線? – AlterPHP 2012-04-16 12:12:37

+0

我最終想實現的目標是,具有特殊角色的用戶只能看到/ special下的特殊頁面,但不應該能夠看到默認用戶的其他頁面。我將粘貼上面的錯誤消息。 – ramo 2012-04-16 12:24:57