2012-02-21 5 views
0

Donc, je rencontre des problèmes étranges avec le SDK Facebook. J'utilise à la fois le JS SDK comme le SDK PHP. Pour connecter un utilisateur à j'utiliser les éléments suivants onclick:Facebook JS/PHP SDK

<a href="/logout/" onclick="FB.logout();">Log out</a> 

Après avoir cliqué sur ce lien, lorsque je tente d'effectuer un appel SDK JS, comme: FB.getAuthResponse(); il renvoie, comme prévu, null. Mais après avoir cliqué sur le lien, lorsque j'utilise le SDK PHP pour vérifier si quelqu'un est connecté, ou simplement utiliser la fonction SDK suivante: $ this -> facebook -> getAccessToken(); il renvoie un jeton valide comme si je suis toujours connecté.

Que manque-t-il ici? A propos, avez-vous besoin d'une partie de mon code PHP pour vérifier ma connexion?

Merci d'avance!

+0

Est-ce que l'utilisateur se déconnecte littéralement de Facebook? Je veux dire si vous ouvrez facebook.com - êtes-vous toujours connecté ou non? – zerkms

+0

Oui, quand je vais sur Facebook, je dois me reconnecter ici. – Diederik

+0

Est-ce que '$ fb-> api ('moi');' php retourne quelque chose? Je demande cela parce que FB PHP SDK met juste en cache le jeton d'accès donc 'getAccessToken()' ne retourne pas toujours le vrai jeton de travail – zerkms

Répondre

1

Le PHP sdk enregistre le jeton d'accès dans la session locale. C'est un énorme problème. Surtout lorsque le jeton facebook expire et que le SDK pense que le jeu est toujours actif. La solution que nous utilisons est chaque fois que nous avons besoin de données utilisateur que nous vérifions par rapport au jeton d'accès pour voir s'il est toujours valide. Les gens penseraient que cela devrait être un comportement explicatif du SDK (pour garantir un jeton actif) mais malheureusement ce n'est pas le cas. Ceci est un extrait du code que nous utilisons.

$graph_url = "https://graph.facebook.com/me?access_token=". $access_token; 

$response = curl_get_file_contents($graph_url); 
$decoded_response = json_decode($response); 
//Check for errors 
if ($decoded_response->error) { 
    // check to see if this is an oAuth error: 
    if ($decoded_response->error->type== "OAuthException") { 
    // Retrieving a valid access token. 
    $dialog_url= "https://www.facebook.com/dialog/oauth?" 
    . "client_id=" . FB_APP_ID 
    . "&redirect_uri=" . urlencode($redirect_url) 
    . "&scope=" . implode(',', $permissions); 
    exit("<script> top.location.href='" . $dialog_url ."'</script>"); 
    } 
    else { 
    //handle other error types 
    } 
else { 
    return $facebook-getUser(); 
} 

Cela fait partie de notre propre fonction getUser. Espérons qu'il vous aidera à mettre en œuvre votre propre :)

+0

'La solution que nous utilisons est chaque fois que nous avons besoin de données utilisateur que nous vérifions par rapport au jeton d'accès. --- en fait, il n'y a pas de différence ** quand vous connaissez un jeton invalide - sur une demande utile réelle, ou sur une demande de jeton. Et la mise en œuvre de Facebook est plus efficace que la vôtre, à condition qu'elle ne nécessite pas de demande de jeton supplémentaire à chaque fois – zerkms