2012-09-17 28 views

回答

4

這在hybridauth用戶手冊與下面的代碼解釋:

// get the stored hybridauth data from your storage system 
    $hybridauth_session_data = get_sorted_hybridauth_session($current_user_id); 

Get_sorted_hybridauth_session是你的內部函數來獲取存儲的數據。 它不也罷,你在一個表中的數據存儲在一個名爲「external_token」什麼的領域,通過普通的SQL查詢得到它,然後只需將其提供給以下功能:

// then call Hybrid_Auth::restoreSessionData() to get stored data 
    $hybridauth->restoreSessionData($hybridauth_session_data); 

    // call back an instance of Twitter adapter 
    $twitter = $hybridauth->getAdapter("Twitter"); 

    // regrab te user profile 
    $user_profile = $twitter->getUserProfile(); 

$ hybridauth-> restoreSessionData($ hybridauth_session_data);將恢復序列化會話對象,然後它將獲得適用於保存的任何提供者的適配器。最好的辦法就是在同一個數據庫表中保存提供者名稱(在這種情況下是Twitter),並使用類似external_provider的東西,然後通過sql auery獲取它並將其提供給getAdapter函數。這應該做你需要做的事情。

手動例子如下:

http://hybridauth.sourceforge.net/userguide/HybridAuth_Sessions.html

=============

作爲一個額外的信息 - 我在我的測試中看到的是,節約以這種方式的會話不會阻止hybridauth登錄用戶,即使用戶在此期間已從應用程序中撤銷了訪問權限。也就是說,如果用戶已經登錄並獲得授權,但是單獨進入應用並撤消訪問權限(例如google),hybridauth仍然會將用戶登錄到系統。我目前正試圖找到一種方法來確保用戶也登錄到遠程系統。

3

晚了,但我認爲這將有助於:

下面的代碼驗證,並從HybridAuth那些提供商的用戶沒有真正登錄到:

$providers = $this->hybridauthlib->getConnectedProviders(); 

foreach($providers as $connectedWith){ 
    $p = $this->hybridauthlib->getAdapter($connectedWith); 
    try { 
     $p->getUserProfile(); 
    } catch (Exception $e) { 
     $p->logout(); 
    } 
}