2010-07-14 6 views
17

sto migrando il mio vecchio FB app per la nuova API grafico utilizzando il PHP APICome controllare se l'utente è loggato con il nuovo facebook php API

Ho due pagine: quelli pubblici (che non richiedono l'accesso utente) e quelli privati ​​(che fanno)

Quindi il codice di ogni singola pagina php nella mia applicazione funziona come segue:

if (this_page_requires_user_login){ 
     $facebook = new Facebook(...) ; 
     $session = $facebook->getSession ; 
     if (!$session){ 
       $url =$facebook.getLoginUrl(array(next => current_page); 
       echo "<fb:redirect url=$url/>" ; 

} 
// the rest of the code continues here 

Ora, come potete vedere, questo modo di lavorare in avanti ogni singola pagina per l'url di accesso e mentre funziona, è anche lento e aggiunge lo & session = {bla} stringa in url molto singolo.

Ho bisogno di un modo per verificare dove un utente ha già effettuato l'accesso prima di reindirarlo alla pagina di accesso. Ma non riesco a trovare tale metodo nel PHP API. Qual'è il miglior modo per farlo?

EDIT

Questo sembrava fare il trucco

if ($session) { 
    try { 
    $me = $facebook->api('/me'); 
    if ($me) { 
     // here comes your code for user who is logged in 
    } 
    } catch (FacebookApiException $e) { 
    login() 
    } 
}else{ 
login() 
} 

function login(){ 

    $url =$facebook.getLoginUrl(array(next => current_page); 


     echo "<fb:redirect url=$url/>" ; 
} 

risposta

19

Se io sto leggendo il codice correttamente, solo se nessuna sessione viene restituito fai il reindirizzamento? Secondo i commenti in Facebook's example, anche se si ottiene una sessione di ritorno, non si può presumere che sia ancora valido. Solo provando una chiamata API che richiede un utente connesso, lo saprai per certo. Questo è il modo migliore che ho visto per determinare in modo affidabile lo stato di accesso/disconnessione.

if ($session) { 
    try { 
    $me = $facebook->api('/me'); 
    if ($me) { 
     //User is logged in 
    } 
    } catch (FacebookApiException $e) { 
    //User is not logged in 
    } 
} 
+3

Se è stato memorizzato il token di accesso e lo usano, questo non funziona, perché la chiamata API funziona ancora senza un'eccezione, ma poi quando li si reindirizza al getLogoutUrl per esempio, li invia li alla homepage di Facebook, invece di inviarti di nuovo al tuo sito web – andrewtweber

+0

@andrewtweber esattamente. Grazie. –

+0

È stato necessario decodificare l'url in precedenza, ecco perché non si è reindirizzati: