2010-07-14 7 views
17

ich meine alten FB App auf die neue Graph API an Migration mit den PHP APIWie kann man überprüfen, ob Benutzer mit neuer facebook php api angemeldet

Ich habe zwei Seiten: public diejenigen (die keine Benutzeranmeldung erforderlich) und privaten (das tut)

so ist der Code jeder einzelnen pHP-Seite in meiner Anwendung funktioniert wie folgt:

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 

Nun, wie Sie, diese Art des Arbeitens nach vorne jeder einzelnen Seite auf die Login-uRL sehen und während es funktioniert, ist es auch langsam und hängt dieansession = {bla} string zu sehr einzelner URL.

Ich brauche eine Möglichkeit zu überprüfen, wo ein Benutzer bereits angemeldet ist, bevor ich ihn auf Login-Seite umleiten. Aber ich kann eine solche Methode nicht in der PHP API finden. Was ist der beste Weg, dies zu tun?

EDIT

Dies schien den Trick

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/>" ; 
} 

Antwort

19

zu tun, wenn ich den Code richtig lese, nur dann, wenn keine Sitzung zurückgegeben wird, haben Sie die Umleitung zu tun? Gemäß den Kommentaren in Facebook's example, selbst wenn Sie eine Sitzung zurück erhalten, können Sie nicht davon ausgehen, dass es noch gültig ist. Wenn Sie nur einen API-Aufruf versuchen, der einen angemeldeten Benutzer erfordert, werden Sie dies sicher wissen. Dies ist der beste Weg, den ich gesehen habe, um den Login/Logout-Status zuverlässig zu bestimmen.

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

Wenn Sie die Zugriffstoken gespeichert haben und es verwenden, das nicht funktioniert, weil der API-Aufruf funktioniert immer noch ohne eine Ausnahme zu werfen, aber dann, wenn man sich auf den getLogoutUrl beispielsweise umleiten, sendet sie nur sie auf der Facebook-Homepage, anstatt Sie zurück auf Ihre Website senden – andrewtweber

+0

@andrewtweber genau. Vielen Dank. –

+0

Sie mussten die URL vorher dekodieren, deshalb werden Sie nicht umgeleitet: