Расширение срока действия маркера доступа не работает - PullRequest
3 голосов
/ 02 февраля 2012

Я на промежуточном уровне в php и новичок в разработке facebook. Я просмотрел документы на Facebook и предыдущие комментарии Stack Overflow.

Все, что я в основном хотел сделать, - позволить пользователю войти в систему со своей учетной записью Facebook и отобразить свое имя.

У моей страницы php есть график, и страница автоматически обновляется каждые 2 или 5 минут.

Я проверяю подлинность и получаю имя Facebook на своем сайте.

 $graph = $facebook->api('/me');

echo $ graph ['first_name'], чтобы получить имя пользователя .. (для которого я думал, что токен доступа не требуется).

Примерно через 90 мин. Я получаю сообщение об ошибке:

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

и у меня нет значения (0) в $ facebook-> getUser (); Параметр

Я знаю, что разрешение на автономный доступ устарело (и у меня это включено в расширенных настройках моих приложений)

Я пытаюсь получить маркер расширенного доступа. В FB документы. Я вижу:

https://graph.facebook.com/oauth/access_token?                  
    client_id=APP_ID&     
    client_secret=APP_SECRET&     
    grant_type=fb_exchange_token&     
    fb_exchange_token=EXISTING_ACCESS_TOKEN

Я включил свои данные в ссылку (существующий действительный токен доступа и все) и получил токен доступа:

access_token=AAADbZBPuUyWwBAFubPaK9E6CnNsPfNYBjQ9OZC63ZBN2Ml9TCu9BYz89frzUF2EnLttuZAcG2fWZAHbWozrvop9bQjQclxVYle7igvoZCYUAg2KNQLMgNP&expires=4050

И все же срок действия этого токена истек примерно через 1 час (.... expires = 4050)

Я предполагаю, что я использую аутентификацию на стороне сервера, потому что я использую PHP?

Ответы [ 2 ]

7 голосов
/ 02 февраля 2012

Полагаю, вам нужно включить "deprecate offline_access" на странице расширенных настроек приложений. Как это сработало для меня:


//added code in base_facebook.php inside the facebook class
public function getExtendedAccessToken(){

    try {
        // need to circumvent json_decode by calling _oauthRequest
          // directly, since response isn't JSON format.
        $access_token_response =
            $this->_oauthRequest(
                $this->getUrl('graph', '/oauth/access_token'),
                $params = array(    'client_id' => $this->getAppId(),
                                    'client_secret' => $this->getAppSecret(),
                                    'grant_type'=>'fb_exchange_token',
                                    'fb_exchange_token'=>$this->getAccessToken(),
                              ));

    } catch (FacebookApiException $e) {
      // most likely that user very recently revoked authorization.
      // In any event, we don't have an access token, so say so.
      return false;
    }

    if (empty($access_token_response)) {
      return false;
    }

    $response_params = array();
    parse_str($access_token_response, $response_params);
    if (!isset($response_params['access_token'])) {
      return false;
    }

    return $response_params['access_token'];
}

Токен все еще может быть недействительным по нескольким причинам, см. How-To: Обработка маркеров доступа с истекшим сроком . Надеюсь, это поможет

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

В этом есть ошибка: https://developers.facebook.com/bugs/241373692605971

Но есть еще один вопрос в SO, который имеет обходной путь (пользователь удаляет и переустанавливает): fb_exchange_token для PHP работает только после того, как пользователь удаляет приложение

...