2013-03-18 3 views
17

Stavo cercando di far funzionare HybridAuth Social Login su questo semplice sito php. Scaricato HybridAuth e installato. Poi scopri che anche gli esempi non funzionano per l'accesso social (provato anche sul server remotoPHP HybridAuth accesso sociale non funziona affatto. Reindirizzamento a? Hauth.start = Facebook e hauth.time

L'esempio di signin_signup normale funziona bene, ma ogni volta che clicco il link per accedere ad un social network (ad esempio, facebook, twitter) reindirizza a (MY_BASE_URL/index.php? hauth.start = Facebook & hauth.time) senza mostrare alcuna finestra di login/messaggi di errore a tutti.

Ho letto attentamente le documentazioni e le altre soluzioni pubblicate qui. config.php per avere un url di base come http://example.com/index.php. Ma semplicemente non risponde. C'è qualcosa che mi manca? Ho trascorso 2 giorni già su di esso.

lei e è il mio config.php

return 
    array(
     "base_url" => "http://example.com/index.php", 

     "providers" => array ( 
      // openid providers 
      "OpenID" => array (
       "enabled" => false 
      ), 

      "AOL" => array ( 
       "enabled" => false 
      ), 

      "Yahoo" => array ( 
       "enabled" => false, 
       "keys" => array ("id" => "", "secret" => "") 
      ), 

      "Google" => array ( 
       "enabled" => true, 
       "keys" => array ("id" => "", "secret" => "") 
      ), 

      "Facebook" => array ( 
       "enabled" => true, 
       "keys" => array ("id" => "xxxxxxxxx", "secret" => "xxxxxxx") 
      ), 

      "Twitter" => array ( 
       "enabled" => true, 
       "keys" => array ("key" => "xxxxxxxx", "secret" => "xxxxxxxx") 
      ), 

      // windows live 
      "Live" => array ( 
       "enabled" => false, 
       "keys" => array ("id" => "", "secret" => "") 
      ), 

      "MySpace" => array ( 
       "enabled" => false, 
       "keys" => array ("key" => "", "secret" => "") 
      ), 

      "LinkedIn" => array ( 
       "enabled" => true, 
       "keys" => array ("key" => "xxxxxxxx", "secret" => "xxxxxxx") 
      ), 

      "Foursquare" => array (
       "enabled" => false, 
       "keys" => array ("id" => "", "secret" => "") 
      ), 
     ), 

     // if you want to enable logging, set 'debug_mode' to true then provide a writable file by the web server on "debug_file" 
     "debug_mode" => false, 

     "debug_file" => "" 
    ); 

Qualcuno può aiutarmi per favore? Ho la sensazione che non funzioni molto bene dopo aver cercato su Internet per un bel po '. Se questo è il caso, qualcuno può indicare una migliore alternativa opensource/free social signin library?

+0

Qualcuno ha un consiglio? Davvero frustrato ... – tintinboss

risposta

22

seguito alla risposta proprio tintinboss, ho trovato avevo bisogno di verificare la presenza di hauth_done così (questo è stato per esempio il test di Facebook):

if (isset($_REQUEST['hauth_start']) || isset($_REQUEST['hauth_done'])) 
{ 
    Hybrid_Endpoint::process(); 
} 

Questo finalmente capito di lavoro - Grazie tintinboss per la risposta utile !

+1

Questo risolve il mio problema! +1 – Victor

19

OK, l'ho risolto io stesso.

Come indicato in precedenza, la documentazione non era davvero buona. Ecco la soluzione per chi vuole integrare questo codice in futuro

In primo luogo, devi fare i tuoi baseurl come questo nel file config.php

"base_url" => "http://yoursite.com/subdomain/index.php", OR 

"base_url" => "http://yoursite.com/index.php", 

Si noti che non sto usando www. Non so perché, ma non funziona con www.

Ora la parte difficile, è necessario includere questo nel file index.php

require_once("PATH_TO_HYBRID/Auth.php"); 
require_once("PATH_TO_HYBRID/Endpoint.php"); 

if (isset($_REQUEST['hauth_start'])) 
     { 
      Hybrid_Endpoint::process(); 

     } 

Processo Endpoint è ciò che ti fa reindirizzare a una pagina vuota se non previsto. E devi aggiungerlo a index.php per quanto ho provato.

Ora il codice dovrebbe funzionare bene :) Sarò felice se aiuta qualcuno.

+6

Grazie. Non ho idea del perché cose così banali come "dimostrazioni di lavoro" sembrano eludere le persone. Sì, so che non tutti gli scenari possono sempre essere coperti, ma non sono sicuro che avrei mai trovato Hybrid_Endpoint :: process() da solo. Inoltre, mi limiterò a quello per Google, almeno, richiede gli URL di reindirizzamento registrati, e "hauth.done = Google deve fare parte del reindirizzamento registrato con Google, per quanto posso dire (solo modo ha funzionato per me). Ancora grazie. – mgkimsal

+0

Anche avendo www nella pagina url stai provando a testare anche su chiavi. – Ally

+0

Tempo trascorso per capire perché non sono stato reindirizzato e ho ricevuto solo "classe" non trovata. Ho persino rimosso tutte le regole .htaccess e ho cancellato il mio schema di caricamento automatico per scoprire che dovevo solo rimuovere www. dall'URL di base ... La tua risposta è molto apprezzata! Grazie. – Ben

7

Le risposte @tintinboss e @dJomp hanno risolto il problema. tuttavia avevo ancora bisogno di ottenere informazioni dall'utente che ha effettuato l'accesso, il che mi ha richiesto molto tempo. Qui condivido la versione finale che ti porterà lontano da questo ciclo terribile.

$config = require 'config.php'; 
require_once("Hybrid/Auth.php"); 
require_once("Hybrid/Endpoint.php"); 

if (isset($_REQUEST['hauth_start']) || isset($_REQUEST['hauth_done'])) { 
    Hybrid_Endpoint::process(); 
} else { 
    try { 
     $hybridauth = new Hybrid_Auth($config); 
     $google = $hybridauth->authenticate("Google"); 
     $user_profile = $google->getUserProfile(); 

     echo "Hi there! " . $user_profile->email; 
    } catch(Exception $e){ 
     echo "Ooophs, we got an error: " . $e->getMessage(); 
    } 
} 
1

Ciao Ho provato tutti i suggerimenti di soluzione di questo problema ma nessuno ha raggiunto la soluzione. Ho risolto il problema in questo modo.

"base_url" => 'http: //'.$_SERVER [' SERVER_NAME '] .'inauth/auth',

Il punto chiave qui è il nome del server.Inoltre, i cookie registrano le sessioni e non è possibile visualizzare in anteprima le modifiche apportate. Cancella i cookie e riprova.