2010-05-10 2 views
4

Exécution du example code for the Facebook API Je reçois un objet de session nul, et je devrais obtenir un objet non nul donnant le commentaire dans le code. Qu'est-ce que je fais de mal?

En d'autres termes, dans mon index.php ce fragment du code exemple montre "aucune session" quand je vais à http://apps.facebook.com/my_app dans mon navigateur:

<?php 

require './facebook.php'; 

// Create our Application instance. 
$facebook = new Facebook(array(
    'appId' => '...', // actual value replaced by '...' for this post 
    'secret' => '...', // actual value replaced by '...' for the post 
    'cookie' => true, 
)); 

// We may or may not have this data based on a $_GET or $_COOKIE based session. 
// 
// If we get a session here, it means we found a correctly signed session using 
// the Application Secret only Facebook and the Application know. We dont know 
// if it is still valid until we make an API call using the session. A session 
// can become invalid if it has already expired (should not be getting the 
// session back in this case) or if the user logged out of Facebook. 
$session = $facebook->getSession(); 

if ($session) { 
    echo "session ok"; 
} 
else { 
    echo "no session"; 
} 


?> 

Note: dans mon index du serveur. php et facebook.php sont dans le même dossier.

+0

de salut toto, j'ai le même problème. cependant, le mien n'est pas une page de toile. C'est juste dans mon fichier php. Puis-je savoir comment l'avez-vous résolu?J'ai demandé à l'utilisateur de se connecter à Facebook sur la page précédente. Merci. – davidlee

Répondre

3

Avez-vous encore lié votre application?

if ($session) { 
    $logoutUrl = $facebook->getLogoutUrl(); 
} else { 
    $loginUrl = $facebook->getLoginUrl(); 
} 
<?php if ($me): ?> 
<a href="<?php echo $logoutUrl; ?>"> 
<img src="http://static.ak.fbcdn.net/rsrc.php/z2Y31/hash/cxrz4k7j.gif"> 
</a> 
<?php else: ?> 
<div> 
Using JavaScript &amp; XFBML: <fb:login-button></fb:login-button> 
</div> 
<div> 
Without using JavaScript &amp; XFBML: 
<a href="<?php echo $loginUrl; ?>"> 
<img src="http://static.ak.fbcdn.net/rsrc.php/zB6N8/hash/4li2k73z.gif"> 
</a> 
</div> 
<?php endif ?> 

Le code provient du lien que vous avez fourni.

+0

Gazler, je suis un peu confus maintenant: l'exemple de code (l'onw j'ai lié) est destiné à être utilisé dans mon propre site et non dans le cadre de la toile. Je teste le cadre de la toile, je ne suis pas intéressé à fournir l'authentification de Facebook dans un autre site. – mmutilva

+0

Pour une utilisation sur votre propre site, vous devez toujours vous authentifier auprès de Facebook qui crée la session et configure les droits d'accès. – Gazler

+0

Cet exemple de code ne fonctionne toujours pas pour moi. Non seulement les images de connexion/déconnexion n'apparaissent pas, si je mets du texte dans le lien afin que je puisse le voir et cliquer pour me connecter, il redirige mon iframe vers un lien moche Aller sur facebook.com. Lorsque je clique sur _that_, je me connecte, puis redirige vers mon profil. Cela ne change pas le statut de l'application quand je reviens dessus. Toujours pas de session. –

1

Je ne suis pas sûr si vous avez obtenu cette réponse encore, mais voici ce que j'ai trouvé de travailler par moi-même. Même si l'utilisateur est connecté à Facebook, la première fois que vous essayez d'obtenir une session, il sera nul. L'exemple d'application que j'ai trouvé met un bouton de connexion sur le formulaire - si vous faites cela, cependant, l'utilisateur devra cliquer sur le bouton même s'il est déjà connecté à Facebook. Ils ne seront plus sollicités, mais c'est une action supplémentaire de l'utilisateur.

Donc, dans mon application et dans ce qui a fonctionné pour plusieurs autres, j'ai trouvé dans les forums est juste de rediriger vers l'URL de connexion. (Si vous inspectez l'URL, l'un de ses paramètres est "return_session = 1".) Lorsque cela reviendra, vous aurez une session et pourrez continuer normalement. Mais dans mon application, si je n'ai pas de jeton d'application, alors je ne peux pas obtenir cette session non plus, donc je dois d'abord obtenir un jeton d'application. Pour obtenir un jeton d'application, regardez l'excellente description de http://forum.developers.facebook.com/viewtopic.php?id=56789, l'article de dynamoman du 7 mai 2010 (à propos de la quatrième publication). Une chose que j'ai rencontrée est que, peu importe où je dis que l'authentification est la page "suivante", elle va à la page configurée dans le canevas. Donc, au lieu de trois pages séparées, j'en ai seulement deux, et l'URL de rappel de canvas doit gérer l'état dans lequel il se trouve.

Mon code réel est dans un framework, donc il ne s'applique pas directement; comme un algorithme, il est:

landing page: 
    if the facebook api token is not loaded, 
     redirect to the authorization url 
    try to load the user id // to validate that the session 
    if the user id is not loaded, 
     redirect to the loginurl from the facebook api 
    // if it reaches here, then we have both an api token and a session 

authorization page: 
    get authorization token // see the post for how to do that 
    redirect back to the page configured as the canvas url 

Il peut y avoir une meilleure façon, et je suis sûr que quelqu'un connaissent mieux ce que moi-même pourrait avoir une meilleure solution, ou le code postal générique.

+0

Une autre remarque - assurez-vous d'utiliser l'ID de l'application lors de la construction de l'objet facebook, et non la clé de l'application. Vous avez besoin de la clé dans les urls d'autorisation, mais l'appid dans l'objet facebook. –

+0

Il s'avère que la session a un access_token intégré, donc je pense que je ne devrais pas avoir besoin de faire tout le processus d'autorisation. Mais je n'étais pas capable de l'enlever et de continuer à travailler - il me manque probablement quelque chose de basique. –

3

S'il vous plaît vérifier après # 8 à http://forum.developers.facebook.net/viewtopic.php?pid=267627

Il a travaillé pour moi. Merci l'utilisateur "standardcombo".

Je l'ai copié ici pour votre commodité.

  1. Aller à votre page de développeur "Mes applications"
  2. Sélectionnez votre application et "Modifier les paramètres de
  3. Avancé> Migrations> Activer le "OAuth 2.0 pour Canvas (beta)"
+0

confirmé .. c'était la seule solution pour travailler pour moi – nyusternie