无法使用Facebook API注销

时间:2011-11-24 02:19:59

标签: php facebook api

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

<?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'];
?>

更新:好的,我猜代码很好,如果我尝试从不同的计算机上使用它,它第一次就可以正常工作了,但是在我登录后,注销链接再次无效。

3 个答案:

答案 0 :(得分: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中权限数组的可接受方式

答案 1 :(得分: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.
        }
    }

我希望这可以帮助你解决进一步的问题。

答案 2 :(得分:0)

来自facebook的

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

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

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