facebookphpapi允许登录、注销和注销给我一个活动访问令牌必须用于查询信息


facebook php api allows login, logging out and logging back gives me An active access token must be used to query information

在验证用户并张贴到他们的墙上后,用户可以选择注销或继续返回登录的主页。如果他们注销并尝试重新登录,我会收到这个错误。

Fatal error: Uncaught OAuthException: An active access token must be used to query
information about the current user. thrown in ...

如果他们保持登录状态,他们就没事了。

在使用FB.logout从jdk注销脚本后,它将$_SESSION['active'][$access_token]设置为null,所以当我从facebook登录再次连接页面时,我会收到上面提到的错误。然而,脚本并没有清除用户数据

$user=$facebook->getUser();返回上一个userID,我认为这是我的问题之一。

这是代码

<?php
//include the Facebook PHP SDK
include_once 'facebook.php';
//instantiate the Facebook library with the APP ID and APP SECRET
$facebook = new Facebook(array(
    'appId' => '162628977190080',
    'secret' => '**MADE PRIVATE**',
    'cookie' => true
));
//Get the FB UID of the currently logged in user
$user = $facebook->getUser();


//if the user has already allowed the application, you'll be able to get his/her FB UID
if($user) {
    //start the session if needed
    if( session_id() ) {
    } else {
        session_start();
    }
    //do stuff when already logged in
    //get the user's access token
    $access_token = $facebook->getAccessToken();
    //check permissions list
    $permissions_list = $facebook->api(
        '/me/permissions',
        'GET',
        array(
            'access_token' => $access_token
        )
    );
    //check if the permissions we need have been allowed by the user
    //if not then redirect them again to facebook's permissions page
    $permissions_needed = array('publish_stream', 'email');
    foreach($permissions_needed as $perm) {
        if( !isset($permissions_list['data'][0][$perm]) || $permissions_list['data'][0][$perm] != 1 ) {
            $login_url_params = array(
                'scope' => 'publish_stream,email',
                'fbconnect' =>  1,
                'display'   =>  "page",
                'next' => 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']
            );
            $login_url = $facebook->getLoginUrl($login_url_params);
            header("Location: {$login_url}");
            exit();
        }
    }
    //if the user has allowed all the permissions we need,
    //get the information about the pages that he or she managers
    $accounts = $facebook->api(
        '/me/accounts',
        'GET',
        array(
            'access_token' => $access_token
        )
    );
    //save the information inside the session
    $_SESSION['access_token'] = $access_token;
    $_SESSION['accounts'] = $accounts['data'];
    //save the first page as the default active page
    $_SESSION['active'] = $accounts['data'][0];
    //redirect to manage.php
    header('Location: ../facebook_result.php');
} else {
    //if not, let's redirect to the ALLOW page so we can get access
    //Create a login URL using the Facebook library's getLoginUrl() method
    $login_url_params = array(
        'scope' => 'read_stream,email',
        'fbconnect' =>  1,
        'display'   =>  "page",
        'next' => 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']
    );
    $login_url = $facebook->getLoginUrl($login_url_params);
    //redirect to the login URL on facebook
    header("Location: {$login_url}");
    exit();
}
?>

通过去掉大量php并使用javascript-sdk解决了这个问题,只花了不到三个小时的时间就完成了我想要的重写。