2017-10-20 17 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>'; 

しかし、私は、私はそれを右に使用していないことをかなり確信しています。 2番目のリダイレクトのためにプロバイダをセッションに保存していますが、Hybridauth APIを使用してプロバイダ名を取得する方法が必要ですか、それを行う必要はありませんか?プライバシー名を知らずに[HYBRIDAUTH :: STORAGE]でユーザーを認証する方法は? 3バージョンなどで100%実用的な例がありますか?ありがとう

+1

私は理解しています。あなたはあなたのURLのリンクに '$ authName'を持っている必要がありますか? –

+0

@AnarBayramov私はHybridauth 3の使い方の良い例と説明が必要です。私は良い例を見つけることができます。私は今質問を更新しています。 1分くらいです – 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は現在開発中ですが、ベータとマークされており、実稼働環境には不適切です。 v2.9.6は現在の安定したリリースです。

サイドバー

ありOPで$configの定義におけるbaiscのPHP構文エラーですので、そのコードは、仕事に行くことはありませんされています。おそらくComposerを介してライブラリをロードする必要があります。これにより、PHPアプリケーションの作業が簡単になります。同じコードを書くより簡単な方法があるときには、 "どのプロバイダを使うのですか"のコードはちょっと工夫されているようですが、そのトリックを行うべきです。

+0

ありがとうございますが、セッションデータ($ _SESSION ['HYBRIDAUTH :: STORAGE'])から認証する方法の例は表示されません。 $ _SESSION ['HYBRIDAUTH :: STORAGE']のみでユーザーを認証する方法はありますか?私はスクリプト内でプロバイダ名FB、グーグルなどを手動で設定するべきだと理解しています。 $ _SESSION ['HYBRIDAUTH :: STORAGE']からアダプタを取得し、ユーザを認証するようなものです。そして、セッションからユーザーを認証するには、どのようなデータをdbに保存する必要がありますか?これは$ _SESSION ['HYBRIDAUTH :: STORAGE']ですか? – SERG

+0

@SERG私が言ったように、あなたは '$ _SESSION ['HYBRIDAUTH :: STORAGE']'を直接使用しません。 'Hybridauth \ Storage \ Session'クラスで' get() 'と' set() 'メソッドを使用しますが、上記のようにセッションでプロバイダを設定するだけです。スクリプト内の設定配列には、各アダプタのすべてのバリエーションが含まれている必要があります。そのため、セッション(またはDB)ではプロバイダをユーザセッションにマッピングするだけでよいでしょう。 – Leith

関連する問題