2010-08-09 5 views
0

J'ai copié le code de l'exemple dans le fichier sdk, et j'ai fait quelques petites modifications (et l'erreur suivante se produit même sans les changements) et le script me connecte correctement.PHP-SDK pour Facebook Connect Erreur de génération lors de la déconnexion

Il reconnaît que je suis connecté, produit les informations de session appropriées, etc. Cependant, le lien de déconnexion facebook.com/logout.php?next= http://www.stockyardmagazine.com/fb/&access_token=xxyy m'envoie à la page susmentionnée et génère une erreur. "Désolé, une erreur est survenue, nous nous efforçons de résoudre ce problème dès que possible." Aussi, je reste connecté.

Est-ce un problème dans mon code, ou quelque chose sur la fin de FB? Je suis sandboxing dans http://www.stockyardmagazine.com/fb/. Ceci est la page entière:

<?php 
require 'facebook.php'; 

// Create our Application instance. 
$facebook = new Facebook(array(
    'appId' => 'numberxxyy', 
    'secret' => 'abcdef123', 
    '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(); 

$me = null; 
// Session based API call. 
if ($session) { 
    try { 
    $uid = $facebook->getUser(); 
    $me = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    } 
} 

// login or logout url will be needed depending on current user state. 
if ($me) { 
    $logoutUrl = $facebook->getLogoutUrl(); 
} else { 
    $loginUrl = $facebook->getLoginUrl(); 
} 


?> 
<!doctype html> 
<html xmlns:fb="http://www.facebook.com/2008/fbml"> 
    <head> 
    <title>facebook</title> 
    <meta name="robots" content="NOINDEX"></meta> 
    <style> 
     body { 
     font-family: 'Lucida Grande', Verdana, Arial, sans-serif; 
     } 
    </style> 
    </head> 
    <body> 
    <div id="fb-root"></div> 
    <script> 
     window.fbAsyncInit = function() { 
     FB.init({ 
      appId : '<?php echo $facebook->getAppId(); ?>', 
      session : <?php echo json_encode($session); ?>, // don't refetch the session when PHP already has it 
      status : true, // check login status 
      cookie : true, // enable cookies to allow the server to access the session 
      xfbml : true // parse XFBML 
     }); 

     // whenever the user logs in, we refresh the page 
     FB.Event.subscribe('auth.login', function() { 
      window.location.reload(); 
     }); 
     }; 

     (function() { 
     var e = document.createElement('script'); 
     e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
     e.async = true; 
     document.getElementById('fb-root').appendChild(e); 
     }()); 
    </script> 




    <?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> 
    <h2>With actual permissions</h2> 
    <fb:login-button size="medium" perms="email,user_birthday,user_location,user_interests,user_education_history" onlogin="Log.info('onlogin callback')">Connect via Facebook</fb:login-button> 
    <h2>For those uncomfortable, and just want to test</h2> 
    <fb:login-button size="medium" onlogin="Log.info('onlogin callback')">Connect via Facebook</fb:login-button> 
    </div> 
    <?php endif ?> 

    <h3>Session</h3> 
    <?php if ($me): ?> 
    <pre><?php print_r($session); ?></pre> 

    <h3>User</h3> 
    <img src="https://graph.facebook.com/<?php echo $uid; ?>/picture"> 
    <?php echo $me['name']; ?> 

    <h3>User Object</h3> 
    <pre><?php print_r($me); ?></pre> 
    <?php else: ?> 
    <strong><em>You are not Connected.</em></strong> 
    <?php endif ?> 
    </body> 
</html> 

I fourni un bouton de connexion avec moins d'autorisations pour les tests, si ce qui compte à certains d'entre vous.

Merci!

Répondre

0

Vous devez avoir la première balise fb-root DIV, puis appelez FB.init() puis FB.logout()

0

Il y a un fb-root div sur la ligne 54 de l'original.

Le javascript modifié est ci-dessous; maintenant la page se rafraîchit constamment.

<script> 
      window.fbAsyncInit = function() { 
      FB.init({ 
       appId : '<?php echo $facebook->getAppId(); ?>', 
       session : '<?php echo json_encode($session); ?>', // don't refetch the session when PHP already has it 
       status : true, // check login status 
       cookie : true, // enable cookies to allow the server to access the session 
       xfbml : true // parse XFBML 
      }); 

      FB.logout(function(response) { 
       // user is now logged out 
      }); 

      FB.login(function(response) { 
       // user is now logged out 
      }); 

      // whenever the user logs in, we refresh the page 
      FB.Event.subscribe('auth.login', function() { 
       window.location.reload(); 
      }); 

      }; 

      (function() { 
      var e = document.createElement('script'); 
      e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
      e.async = true; 
      document.getElementById('fb-root').appendChild(e); 
      }()); 
     </script> 
0

Sarfraz est correct, mais vous avez également un autre problème. Suivez votre logique ici:

FB.logout(function(response) { 
     // user is now logged out 
    }); 

    FB.login(function(response) { 
     // user is now logged out 
    }); 

    // whenever the user logs in, we refresh the page 
    FB.Event.subscribe('auth.login', function() { 
     window.location.reload(); 
    }); 

Vous n'êtes pas connecté à l'utilisateur, alors vous connecter l'utilisateur, puis vous vous abonnez à un événement de connexion qui recharge la page. Une fois la page rechargée, vous la déconnectez à nouveau, puis à nouveau, actualisez, ad nauseum.

Rappelez-vous que ce sont des appels asynchrones. N'importe lequel d'entre eux peut revenir en premier. Si vous voulez vraiment cette logique, alors vous devriez écrire quelque chose comme ceci:

window.fbAsyncInit = function() { 
     FB.init({ 
      appId : '<?php echo $facebook->getAppId(); ?>', 
      session : '<?php echo json_encode($session); ?>', // don't refetch the session when PHP already has it 
      status : true, // check login status 
      cookie : true, // enable cookies to allow the server to access the session 
      xfbml : true // parse XFBML 
     }); 

     FB.logout(function(response) { 
      // user is now logged out 
      FB.login(function(response) { 
       // user is now logged out 
       // whenever the user logs in, we refresh the page 
       FB.Event.subscribe('auth.login', function() { 
        window.location.reload(); 
       }); 
      }); 
     }); 
    }; 

Mais encore, je ne vois pas le point ...

Questions connexes