Facebook SDK 4-会话已过期,或对此应用无效

Facebook SDK 4-会话已过期,或对此应用无效,facebook,facebook-sdk-4.0,Facebook,Facebook Sdk 4.0,我试图制作一个php页面,捕获用户令牌,然后从api检索数据,一切都很好,直到我手动从我测试的facebook帐户中删除应用访问,现在它给了我一个错误,在标题中提到 这是我的密码: <?php session_start(); require_once( 'Facebook/FacebookSession.php' ); require_once( 'Facebook/FacebookRedirectLoginHelper.php' ); require_once( 'Facebook

我试图制作一个php页面,捕获用户令牌,然后从api检索数据,一切都很好,直到我手动从我测试的facebook帐户中删除应用访问,现在它给了我一个错误,在标题中提到

这是我的密码:

<?php

session_start();

require_once( 'Facebook/FacebookSession.php' );
require_once( 'Facebook/FacebookRedirectLoginHelper.php' );
require_once( 'Facebook/FacebookRequest.php' );
require_once( 'Facebook/FacebookResponse.php' );
require_once( 'Facebook/FacebookSDKException.php' );
require_once( 'Facebook/FacebookRequestException.php' );
require_once( 'Facebook/FacebookAuthorizationException.php' );
require_once( 'Facebook/GraphObject.php' );
require_once( 'Facebook/GraphUser.php' );
require_once( 'Facebook/GraphSessionInfo.php' );
require_once( 'Facebook/Entities/AccessToken.php' );
require_once( 'Facebook/HttpClients/FacebookHttpable.php' );
require_once( 'Facebook/HttpClients/FacebookCurl.php' );
require_once( 'Facebook/HttpClients/FacebookCurlHttpClient.php' );


use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphUser;
use Facebook\GraphSessionInfo;
use Facebook\Entities\AccessToken;
use Facebook\HttpClients\FacebookHttpable;
use Facebook\HttpClients\FacebookCurl;
use Facebook\HttpClients\FacebookCurlHttpClient;


$id = '';
$secret = '';

FacebookSession::setDefaultApplication($id, $secret);

$helper = new FacebookRedirectLoginHelper('http://localhost/facebook/index.php');


try{
$session = $helper->getSessionFromRedirect();
}catch(Exception $e)
{

}

if(isset($_SESSION['token'])){

$session = new FacebookSession($_SESSION['token']);
try{
$session->Validate($id, $secret);
}catch(FacebookAuthorizationException $e){
$session = '';
}

}

if(isset($session)){
$_SESSION['token'] = $session->getToken();
echo "Login Successful<br>";
$request = new FacebookRequest($session, 'GET', '/me');
$response = $request->execute();
$name = $response->getGraphObject()->asArray();
echo '<pre>' . print_r( $name , 1 ) . '</pre>';
echo '<a href="' . $helper->getLogoutUrl( $session, 'localhost/facebook/logout.php' ) .           '">Logout</a>';

}
else
{
$permissions = array('email','user_friends');
echo '<a href="' . $helper->getLoginUrl($permissions) . '">Login With Facebook</a>';

}
?>

OP提供的解决方案

通过将部分代码替换为以下内容解决了此问题:


您是否正在使用存储的、为不同应用程序ID生成的访问令牌?该错误意味着您正在删除该应用程序。如果您从该帐户中删除了该应用程序,为什么您希望该令牌仍然有效?是的,我正在存储它,并且我删除了该应用程序,因为我已更新了该应用程序的权限。
if (isset($_SESSION) && isset($_SESSION['fb_token'])) {
    $session = new FacebookSession($_SESSION['fb_token']);
    try {
        if (!$session->validate()) {
            $session = null;
        }
    } catch (Exception $e) {
        $session = null;
    }
} else {
    try {
        $session = $helper->getSessionFromRedirect();
    } catch (FacebookRequestException $ex) {
    } catch (Exception $ex) {
        echo $ex->message;
    }
}