2012-01-01 45 views
4

我在我的項目中使用了FOSUserBundle和FOSFacebookBundle(用於SF 2.0.x版)。另外,我按照FOSFacebookBundle文檔中所述實現並定製了FacebookProvider。我想實現以下工作流程: 1.)用戶第一次訪問我的門戶 2.)他點擊Facebook登錄按鈕 3.)現在我需要檢查,如果這個用戶,誰點擊Facebook-Login-Button在我的門戶網站上已經有Facebook-Friends。 4.如果他有朋友,請將他重定向到預填充輸入字段的註冊頁面(包括來自Facebook的信息,如用戶名,名字,姓氏等)。 5.)如果他在我的門戶上沒有Facebook好友,將他重定向到另一頁Symfony 2 FOSFacebookBundle在登錄前自定義重定向

我已經開始尋找Webprofiler,哪些事件被調用。我開始創建我自己的事件監聽器descried此頁上:http://www.dobervich.com/2011/10/13/login-redirection-revisited/但輪廓顯示我的「不叫聽衆」列表中我的聽衆:security.interactive_login SecurityListener :: onSecurityInteractiveLogin

有誰知道,我怎麼可以自定義此登錄前檢查並將用戶重定向到頁面?

很高興在此獲得一些幫助。

謝謝 拉莫

回答

5

您需要配置一個自定義的驗證成功處理程序。配置實現AuthenticationSuccessHandlerInterface服務:

facebook_auth_success_handler: 
    class: MyHandler 
    public: false 
    arguments: 
     # your dependencies... 

然後你fos_facebook塊下這個處理程序添加到security.yml

firewalls: 
    foo: 
     fos_facebook: 
      success_handler: facebook_auth_success_handler 

處理程序本身應該是這個樣子:

public function onAuthenticationSuccess(Request $request, TokenInterface $token) 
{ 
    $user = $token->getUser(); 
    $hasFriendsHereAlready = // your logic here 
    if ($hasFriendsHereAlready) { 
     $route = 'foo'; 
    } else { 
     $route = 'bar'; 
    } 
    return new RedirectResponse($this->router->generate($route)); 
} 
+1

嘿克里斯,感謝您的解決方案。問題在於,使用默認的FacebookUserProvider創建了一個用戶,並且該用戶也已登錄......所以,我重定向到了我的$路由,但問題是,當我輸入另一個通行證時,只能訪問記錄在用戶中,我也到達那裏。我嘗試實現的是,該用戶只能訪問登錄頁面和另一個頁面。你知道如何解決這個問題嗎? – ramo 2012-01-03 11:11:05

+0

好吧,找到一種方法來註銷用戶security.context – ramo 2012-01-03 12:59:32