Facebook PHP SDK 3.1.1 «Ошибка проверки токена доступа» после перехода на страницу приложения - PullRequest
0 голосов
/ 08 марта 2012

У меня странные проблемы при создании приложения iframe для Facebook. Кажется, что приложение застревает в бесконечном цикле на странице «Перейти к приложению».

После того, как пользователь авторизует приложение на странице «Перейти к приложению» и возвращается в приложение, вызов / me api вызывает исключение «Ошибка проверки доступа». Я проверил, есть ли в подписанном запросе действительный токен доступа (протестировано с помощью инструмента отладки токена доступа на Facebook). Я попытался установить это с помощью метода setAccessToken () безуспешно. Метод getUser () успешно возвращает идентификатор пользователя, но он все еще зависает при вызове / me api.

Это происходит не во всех браузерах, я просто вижу это в Chrome, иногда не совсем ясно. Я исправил это в IE, используя заголовок P3P. В Firefox работает нормально.

Я в значительной степени застрял, и я не в силах вытащить, поэтому любые идеи приветствуются. Большое спасибо.

Полное сообщение об ошибке: «Ошибка проверки токена доступа. Вы не можете получить доступ к приложению, пока не войдете на сайт www.facebook.com и не выполните приведенные инструкции».

Некоторый код ниже.

$this->_facebook = new Facebook(
    array(
        'appId' => $this->_config['appId'],
        'secret' => $this->_config['secret'],
        'cookie' => true,
        'fileUpload' => true
    )
);

$this->_signedRequest = $this->_facebook->getSignedRequest();

// Doing something with signed request, not FB related

$this->_userId = $this->_facebook->getUser();

if($this->_userId) {
    try{
        // At this line the "Error validating access token" error shows up
        $this->_user = $this->_facebook->api('/me');

        // Some more irrelevant code here

    } catch (Exception $e){
        $this->_facebook->destroySession();
        $this->_facebookLogin(false);
    }
} else {
    $this->_facebook->destroySession();
    $this->_facebookLogin(false);
}

// The _facebookLogin method
public function _facebookLogin($perms = 'email,user_birthday,publish_stream,video_upload'){
    $data = array(
        'fbconnect' => 0,
        'redirect_uri' => 'aredirecturl.com'
    );

    if(!empty($perms)) {
        $data['scope'] = $perms;
    }
    echo '<script type="text/javascript">window.top.location.href = "'.$this->_facebook->getLoginUrl($data).'";</script>';
    exit;
}

Ответы [ 2 ]

0 голосов
/ 18 мая 2012

А как насчет уничтожения вашей сессии вручную?Вы отлаживали эти параметры?

unset($_SESSION['fb_'.$YOUR_API_KEY.'_code']);
unset($_SESSION['fb_'.$YOUR_API_KEY.'_access_token']);
unset($_SESSION['fb_'.$YOUR_API_KEY.'_user_id']);
unset($_SESSION['fb_'.$YOUR_API_KEY.'_state']);

Я почти использую тот же код, что и вы, но я не использую fileUpload и параметры cookie.

0 голосов
/ 09 марта 2012

Редактировать эту часть

// At this line the "Error validating access token" error shows up
$this->_user = $this->_facebook->api('/me');

к этому

// At this line the "Error validating access token" error shows up
$this->_user = $this->facebook->api('/me','GET');
...