2011-11-24 46 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(); 
}