2010-07-14 4 views
17

J'émigre mon ancienne application FB à la nouvelle API graphique en utilisant la PHP APIComment vérifier si l'utilisateur est connecté avec le nouveau facebook php api

J'ai deux pages: les établissements publics (qui ne nécessitent pas la connexion de l'utilisateur) et privés (qui font)

Ainsi, le code de chaque page php dans mon application fonctionne comme suit:

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 

maintenant, comme vous pouvez le voir, cette façon de travailler avant chaque page à l'URL de connexion et tandis que cela fonctionne, il est également lent et ajoute & session = {bla} chaîne à URL très unique.

J'ai besoin d'un moyen de vérifier où un utilisateur est déjà connecté avant de le rediriger vers la page de connexion. Mais je ne peux pas trouver une telle méthode dans l'API php. Quelle est la meilleure façon de faire cela?

EDIT

Cela semblait faire l'affaire

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

Répondre

19

Si je lis correctement votre code, que si aucune session est retournée faites-vous la redirection? Selon les commentaires au Facebook's example, même si vous récupérez une session, vous ne pouvez pas supposer qu'elle est toujours valide. Seulement essayer un appel d'API qui nécessite un utilisateur connecté vous le savez à coup sûr. C'est la meilleure façon dont j'ai vu pour déterminer de manière fiable l'état de connexion/déconnexion.

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

Si vous avez enregistré le jeton d'accès et l'utiliser, cela ne fonctionne pas, parce que l'appel API fonctionne toujours sans lancer une exception, mais quand vous les rediriger vers l'getLogoutUrl par exemple, il envoie juste à la page d'accueil de Facebook, au lieu de vous renvoyer à votre site Web – andrewtweber

+0

@andrewtweber exactement. Merci. –

+0

Vous deviez décoder l'URL auparavant, c'est pourquoi vous ne l'avez pas redirigé:

Questions connexes