2011-11-24 112 views
1

所以我创建了这个基本代码来使用Facebook登录/注销。一分钟前,一切正常,我正在改变的东西,然后突然,我无法注销。我将代码剥离到纯登录/退出行,但它仍然无法工作。我从来没有看到登录链接。即使我点击注销,我仍然可以看到我的电子邮件,显然我仍然可以访问我的Facebook信息。 这个API令我疯狂,只有今天早上getUser()总是返回0,无论我是否登录,现在都是相反的 - 即使我退出,它总是返回一个用户!使用Facebook API无法注销

<?php 
    require '../facebook-php-sdk/src/facebook.php'; 
    $appID = '175698905xxxxxx'; 
    $secret = 'cc8f99df86f7978c67xxxxxxxxxxxxx'; 
    $facebook = new Facebook(array(
     'appId' => $appID, 
     'secret' => $secret 
     )); 

    // Get User ID 
    $user = $facebook->getUser(); 
    $loginUrl = $facebook->getLoginUrl(array('req_perms' => 'email,read_stream,user_birthday')); 
    $logoutUrl = $facebook->getLogoutUrl(); 
    if (!$user) 
    { 
     echo '<p><a href='.$loginUrl.'>Log in.</a></p>'; 
    } 
    else 
    { 
     echo '<p><a href='.$logoutUrl.'>Log out.</a></p>'; 
    } 
    $user_profile = $facebook->api('/me'); 
    echo $user_profile['email']; 
?> 

更新:OK,我猜的代码是好的,如果我尝试使用它从不同的计算机,它的工作原理确定的第一次,但我登录后,注销链接不会再工作。

回答

2

很难知道发生了什么,因为您的代码是sorta没问题。
考虑重置您的应用秘密,从应用程序列表中删除应用程序(在您的测试用户或您的配置文件中,如果您不使用测试用户)并清除缓存。

而且测试,看看是否有什么别的事情,发生在一个try/catch的API调用,看看它是否会引发异常

if ($user) { 
    try { 
     $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
     error_log($e); 
     $user = null; 
    } 
} 

另外,作为劳伦斯提到

...方法,如果没有登录的用户

因此,而不是额外的工作,返回当前用户的Facebook的用户ID,或0为什么不打开它使周围如果$ user被定义为无论如何称为注销URL。

if ($user) { 
    $logoutUrl = $facebook->getLogoutUrl(); 
} else { 
    $loginUrl = $facebook->getLoginUrl(array('scope' => 'email,read_stream,user_birthday')); 
} 

请注意,我用的scope这是在最新的PHP SDK

0

@phwd的解决方案的权限数组接受的方式实在是太棒了。我用以下setcookie()行增强它:

if ($user) { 
     try { 
      $user_profile = $facebook->api('/me'); 
     } catch (FacebookApiException $e) { //session was AFTER ALL invalid! 
      error_log($e); 
      $user = null; // we behave as if FB is logged-out (which it is actually!) 
      setcookie('fbm_'.$facebook->getAppId(), '', time()-100, '/', '.yourdomain.com'); //add this also just in case, even the latest php SDK has problem sometimes clearing this cookie. Now after a page refresh the php sdk will not return a userid. 
     } 
    } 

我希望这可以帮助你在出现更多问题的情况下。

0

$logoutUrl从脸书注销。 要清除检索到的数据,您必须清除整个会话。

<a href='?sessionEnd'>seesion end</a>" 

if(isset($_GET['sessionEnd'])){ 
    session_destroy(); 
    setcookie('PHPSESSID',false); 
    header('Location: /'); 
    exit(); 
}