2017-10-20 206 views
2

我可以使用Hybridauth3 lib登錄/授權用戶。 這裏是我的代碼:如何使用Hybridauth 3登錄/註銷?

session_name("authSession"); 
session_start(); 
include 'hybridauth/src/autoload.php'; 
$config = [ 
    'callback' => "https://***/loginRead.php", 
    'providers' => [ 
     'Twitter' => [],"includeEmail" => true], 
     'Google' => [], 
     'Facebook' => [] 
    ], 
]; 

$authName = "Facebook"; 
if(isset($_REQUEST['provider'])){ 

    $provider = strtolower($_REQUEST['provider']); 
    switch ($provider) { 
     case 'google': 
      $authName = "Google"; 
      break; 
     case 'facebook': 
      $authName = "Facebook"; 
      break; 
     case 'twitter': 
      $authName = "Twitter"; 
      break; 
    } 
    $_SESSION['provider'] = $authName; 

    $hybridauth = new Hybridauth\Hybridauth($config); 
    $adapter = $hybridauth->getAdapter($authName); 
    $user = $adapter->authenticate(); 
    $userProfile = $adapter->getUserProfile(); 

} 
    // this part is for this callback https://***/loginRead.php from config 
    if(isset($_SESSION['HYBRIDAUTH::STORAGE']) && count($_SESSION['HYBRIDAUTH::STORAGE'])>=1){ 

     $provider = $_SESSION['provider']; 
     $hybridauth = new Hybridauth\Hybridauth($config); 
     $adapter = $hybridauth->getAdapter($provider); 
     $user = $adapter->authenticate(); 
     $userProfile = $adapter->getUserProfile(); 
    } 

    if(isset($_GET['loginExit'])){ 
     $adapter->disconnect(); 
     $hybridauth->disconnectAllAdapters(); 
     session_destroy(); 
     header("Location:test.php"); 
     exit(); 
    } 

    echo '<img src="'.$userProfile->photoURL.'"><br>'; 
    echo $userProfile->identifier.'<br>'; 
    echo '<a href="?loginExit">Exit</a>'; 

但我敢肯定,我沒有使用它的權利。 由於我在第二次重定向的會話中保存提供程序,但是必須有辦法使用Hybridauth API獲取提供程序名稱,或者可能沒有必要這樣做?如何用[HYBRIDAUTH :: STORAGE]授權用戶而不知道私有名稱? 3版本還有什麼好的100%實例嗎?謝謝

+1

我明白的是;你需要在你的url鏈接中有'$ authName'嗎? –

+0

@AnarBayramov我需要一個很好的示例/如何使用Hybridauth 3的解釋。我可以找到任何好的例子,只是如何驗證,這就是全部。我正在更新我的問題。給我一分鐘 – SERG

+1

https://github.com/rgnevashev/hybridauth3/tree/master/example? –

回答

1

作爲@Anar Bayramov points out,有一些例子,雖然你可能想look at the official repository examples來代替。如果您更喜歡那些代碼示例,他們也有一些更漂亮的online documentation for Hybridauth

如果您想通過Hybrid'API'使用會話存儲,那麼您希望通過the Storage\Session class進行訪問,而不是試圖直接操縱會話。一般來說,擁有一個庫有他們自己的訪問方法,並且你試圖跳過它直接與會話交談會導致一些非常時髦,很難調試的問題。

如果您使用Hybridauth會話訪問器來存儲提供程序類型,那麼您將能夠從它們的會話存儲中加載正確的一個,而不是您自己的。

最後一點,截至撰寫本答案時,Hybridauth v3正在積極開發中,但被標記爲beta並且可能不適合生產使用。 v2.9.6是目前穩定發佈。

邊欄

有一個在在OP $config定義一個baisc PHP語法錯誤,這樣的代碼是從來沒有去上班。您應該也可以通過Composer加載庫 - 它會讓您的生活更輕鬆的任何PHP應用程序。如果有更簡單的方法來編寫相同的代碼,那麼「我使用哪個提供程序」代碼似乎有點人爲或迂迴,但它應該做到這一點。

+0

謝謝,但我沒有看到如何從會話數據($ _SESSION ['HYBRIDAUTH :: STORAGE'])進行身份驗證的示例;有沒有一種方法來驗證用戶只有$ _SESSION ['HYBRIDAUTH :: STORAGE'],因爲我知道我應該在腳本中設置提供者名稱FB,google等manualy。就像從$ _SESSION ['HYBRIDAUTH :: STORAGE']獲取適配器並授權用戶一樣。我應該在db中存儲什麼樣的數據以從會話中授權用戶?這一個$ _SESSION ['HYBRIDAUTH :: STORAGE']? – SERG

+0

@SERG正如我所說的,你不會直接使用'$ _SESSION ['HYBRIDAUTH :: STORAGE']';你可以在'Hybridauth \ Storage \ Session'類中使用'get()'和'set()'方法,但是你可以像上面那樣在會話中設置提供者 - 沒有什麼能夠阻止它。腳本中的配置數組應該包含每個適配器的所有變體,因此在會話(或數據庫)中,只需將提供程序映射到用戶會話即可。 – Leith