2017-10-20 17 views
2

Je peux me connecter/authentifier l'utilisateur avec Hybridauth3 lib. Voici mon code:Comment se connecter/déconnecter avec 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>'; 

Mais je suis sûr que je ne l'utilise pas droit. Comme je sauve le fournisseur dans la session pour la deuxième redirection, mais il doit y avoir moyen d'obtenir le nom du fournisseur avec Hybridauth api ou peut-être pas besoin de faire cela? Comment authentifier l'utilisateur avec [HYBRIDAUTH :: STORAGE] sans connaître le nom du pirate? Y at-il un bon exemple de travail 100% pour la version 3 ou etc? Merci

+1

ce que je comprends est; vous devez avoir '$ authName' dans votre lien d'URL, n'est-ce pas? –

+0

@AnarBayramov J'ai besoin d'un bon exemple/explication de la façon d'utiliser Hybridauth 3. Je peux trouver n'importe quel bon exemple, juste comment auth et c'est tout. Je mets à jour ma question maintenant. Donnez-moi une minute – SERG

+1

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

Répondre

1

Comme @Anar Bayramov points out, il existe quelques exemples, bien que vous vouliez probablement look at the official repository examples à la place. Ils ont aussi un plus joli online documentation for Hybridauth si vous préférez que sur les exemples de code.

Si vous souhaitez utiliser le stockage de session via l'API 'hybride', vous devez accéder via the Storage\Session class au lieu d'essayer de manipuler la session directement. Généralement parlant, avoir une bibliothèque avec sa propre méthode d'accès et essayer de l'ignorer pour parler directement à la session va donner des problèmes assez géniaux, difficiles à déboguer.

Si vous utilisez l'accesseur de session Hybridauth pour stocker le type de fournisseur, vous pourrez charger le bon à partir de leur stockage de session au lieu du vôtre.

Note finale, à la date d'écriture de cette réponse Hybridauth v3 est en cours de développement mais est marqué beta et potentiellement impropre à la production. v2.9.6 est la version actuelle stable.

Barre latérale

Il y a une erreur de syntaxe PHP baisc dans la définition de $config dans le PO, de sorte que le code est jamais va travailler. Vous devriez probablement charger la bibliothèque via Composer - cela vous facilitera la vie pour n'importe quelle application PHP. Le code "quel fournisseur puis-je utiliser" semble un peu artificiel/rond-point lorsqu'il existe des façons plus simples d'écrire le même code, mais cela devrait faire l'affaire.

+0

Merci, mais je ne vois pas un exemple comment authentifier des données de session ($ _SESSION ['HYBRIDAUTH :: STORAGE']); Y at-il un moyen d'authentifier l'utilisateur avec seulement $ _SESSION ['HYBRIDAUTH :: STORAGE'], comme je comprends, je devrais définir le nom du fournisseur FB, google etc. manualy dans le script. Comme obtenir l'adaptateur de $ _SESSION ['HYBRIDAUTH :: STORAGE'] et auth l'utilisateur. Et quel type de données dois-je stocker dans db pour authentifier l'utilisateur de la session? celui-ci $ _SESSION ['HYBRIDAUTH :: STORAGE']? – SERG

+0

@SERG Comme je l'ai dit, vous n'utilisez pas '$ _SESSION ['HYBRIDAUTH :: STORAGE'] directement; vous utiliseriez les méthodes 'get()' et 'set()' dans la classe 'Hybridauth \ Storage \ Session', mais vous pourriez simplement définir le fournisseur dans la session comme vous le faites ci-dessus - il n'y a rien qui l'arrête. Votre tableau de configuration dans le script doit contenir toutes les variantes de chacun des adaptateurs. Ainsi, dans la session (ou la base de données), il vous suffira de mapper le fournisseur à la session utilisateur. – Leith