Facebook PHP SDK即使在注销后也会返回用户ID

时间:2013-09-26 15:03:47

标签: php facebook authentication sdk

我正在使用FB PHP SDK来登录用户。这里没什么好看的 - 只需要调用$fb->getLoginUrl()来生成登录链接,用户访问它,授权,退回到我的网站,他们'重新登录。到目前为止,非常好。

在为登录用户保留的页面上,我有以下代码:

echo $fb->getUser(); //supposedly outputs user ID or 0 on failure

但问题是输出用户ID ,即使我已手动转到Facebook并退出。它似乎永远不会为我输出0,即检测到我已退出。

我错过了什么?有没有更好的方法来检测登录状态?

(注意:JS SDK不适合我)

1 个答案:

答案 0 :(得分:1)

尝试使用destroySession方法,并在要注销时终止会话变量。

include('fb-php-sdk/facebook.php');
$config = array();
$config['appId'] = '641xxxx559';
$config['secret'] = '3bxxxxxxcd1c';

$facebook = new Facebook($config);

if(isset($_GET['act']) && $_GET['act'] == "logout") {
    $facebook->destroySession();

            // destroy session var here. Should be in format of "fmb_$appID"
}


$user = $facebook->getUser();
echo $user;
if ($user) {

    try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
    } catch (FacebookApiException $e) {
    echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>';
    $user = null;
    }
    echo "<pre>";
    print_r($user_profile);
    echo "</pre>";  
    $logout = $facebook->getLogoutUrl();

    //echo $logout;

    echo "<a href='test.php?act=logout'>Logout</a>";


} else {

    $login = $facebook->getLoginUrl(array("scope"=>"email","display"=>"popup","redirect_uri"=>"http://domain.com/test.php"));

    echo "<a href='".$login."'>Login</a>";

}

正如您所看到的,我正在传递params数组中的范围键以请求我想要的内容。第一次运行时,Facebook将要求用户确认范围内的要求。