2015-03-31 80 views
1

我有一個ZF2項目,我使用SocalNick/ScnSocialAuth(https://github.com/SocalNick/ScnSocialAuth)啓用社交身份驗證。使用SocalNick/ScnSocialAuth獲取用戶的個人資料數據

驗證流程正常。我已經讓用戶使用他或她的社交登錄名(例如Facebook)進行身份驗證。

現在我需要知道如何從我的控制器視圖中訪問用戶的配置文件數據。我懷疑它必須使用HybridAuth模塊(也被加載),但我無法找到如何。

任何人都可以幫助我嗎?

回答

1

的可能途徑兩個在時間去訪問這些數據的用戶註冊:

你可以附加一個事件監聽器registerViaProvider event,其接收HybridAuth適配器作爲參數。實現這一目標的最簡單方法是將你的模塊的onBootstrap,這樣的過程中,將其固定:

$sem = $e->getApplication()->getEventManager()->getSharedManager(); 
$sem->attach('ScnSocialAuth\Authentication\Adapter\HybridAuth', 'registerViaProvider', function($event) { 
    $provider = $event->getParam('provider'); 
    // $provider is the HybridAuth provider the user authenticated 
}); 

然後提取出用戶的個人數據,並存儲在某個地方。

另一種可能性是:ScnSocialAuth的HybridAuth適配器(ScnSocialAuth\Authentication\Adapter\HybridAuth)實現每個支持服務<service>ToLocalUser方法,這樣你就可以覆蓋ZfcUser的實體添加一些額外的字段然後擴展HybridAuth適配器類重寫每一個這些方法並填充ZfcUser實體與必要的配置文件數據。

+0

嗨亞當倫德里根。謝謝你的回答。只要我嘗試這兩個建議,我會給出一個反饋。 – 2015-04-02 21:45:48

+0

感謝Adam LIndrigan。他們工作過。 – 2015-04-04 11:12:24

2

Adam Lundrigan提出的解決方案是可以的。但還有一個我想在這裏註冊的。

下面這段代碼可以從控制器的動作被稱爲:

$hybridAuth = $this->getServiceLocator()->get('HybridAuth'); 
// if the user is connected, authenticate will return an instance of the provider adapter 
$adapter = $hybridAuth->authenticate('facebook'); 
if (!$adapter->isUserConnected()) { 
    // do something sensible for a logged out user... 
    return $this->redirect()->toRoute('some-logged-out-route'); 
} 
$userProfile = $adapter->getUserProfile(); 

我要感謝尼古拉Calugar用於顯示我這個替代解決方案。

相關問題