facebook Uncaught OAuthException: необходимо использовать активный токен доступа для запроса информации о текущем пользователе.

Я изо всех сил пытался выяснить, что с этим происходит. Мои скрипты какое-то время работали нормально, а потом вдруг наполовину остановились.

Я получаю доступ к API и возвращаю токен доступа. С токеном доступа я могу легко получить доступ к общедоступной информации пользователей. Однако, когда я пытаюсь опубликовать информацию в их учетной записи FB, я получаю эту ошибку.

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

Есть идеи, что здесь происходит? Я также использую сеансы на своем сайте, чтобы отслеживать внутренние идентификаторы пользователей. Не уверен, что мои сеансы могут быть причиной проблемы.

Это мой сценарий загрузки, при котором я получаю сообщение об ошибке.

require 'facebook/src/facebook.php';


// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
  'appId'  => '12345678',
  'secret' => 'REMOVED',
  'fileUpload' => true, 
  'cookie' => true,
));
$facebook->setFileUploadSupport(true); 

$me = null;
// Session based API call.
if ($session) {
  try {
    $uid = $facebook->getUser();
    $me = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
  }
}


// login or logout url will be needed depending on current user state.
if ($me) {
  $logoutUrl = $facebook->getLogoutUrl();
} else {
  $loginUrl = $facebook->getLoginUrl();
}


$photo_details = array('message' => 'my place');
$file='photos/my.jpg'; //Example image file
$photo_details['image'] = '@' . realpath($file);
$upload_photo = $facebook->api('/me/photos', 'post', $photo_details);

person user401183    schedule 17.05.2011    source источник


Ответы (7)


Просто проверьте текущий идентификатор пользователя Facebook $user, и если он вернул значение null, вам необходимо повторно авторизовать пользователя (или использовать настраиваемое значение идентификатора пользователя $_SESSION - не рекомендуется)

require 'facebook/src/facebook.php';


// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
  'appId'  => 'APP_ID',
  'secret' => 'APP_SECRET',
));

$user = $facebook->getUser();

$photo_details = array('message' => 'my place');
$file='photos/my.jpg'; //Example image file
$photo_details['image'] = '@' . realpath($file);

if ($user) {
  try {
    // We have a valid FB session, so we can use 'me'
    $upload_photo = $facebook->api('/me/photos', 'post', $photo_details);
  } catch (FacebookApiException $e) {
    error_log($e);
  }
}


// login or logout url will be needed depending on current user state.
if ($user) {
  $logoutUrl = $facebook->getLogoutUrl();
} else {
// redirect to Facebook login to get a fresh user access_token
  $loginUrl = $facebook->getLoginUrl();
  header('Location: ' . $loginUrl);
}

Я написал руководство о том, как загрузить изображение на стену пользователя.

person ifaour    schedule 17.05.2011
comment
+1 ... спасибо за ответ ... ломал мне голову на этом ... 'я' ищет действующий сеанс facebook ... тогда как 'facebook user_id' не ... именно то, что я хотел - person Ninja; 23.05.2012
comment
здесь мы проверяем разрешения для приложения?. В первый раз он показал диалог facebook для goto App. я щелкнул его. После этого теперь, когда я открываю страницу, отображается пустая страница - person V I J E S H; 02.08.2012
comment
@VIJESH, вы используете приведенный выше код как есть? вы знаете, что это неполный код, чтобы вы начали. - person ifaour; 28.09.2012
comment
спасибо, я решил свою проблему на 50% прямо сейчас, пожалуйста, если вы можете помочь, у меня есть аналогичная тема здесь stackoverflow.com/questions/43632458/ :( - person ; 01.05.2017

Использовать:

$facebook->api('/'.$facebook_uid)

вместо

$facebook->api('/me')

оно работает.

person yacon    schedule 12.12.2012
comment
Это не ошибка; поскольку первый комментарий к принятому ответу гласит ... 'me' ищет действительный сеанс facebook, тогда как 'facebook user_id' не - person Mike; 07.01.2013

Итак, у меня была такая же проблема, но это было потому, что я сохранял токен доступа, но не использовал его. Это могло быть потому, что я очень хочу спать из-за сроков, или, может быть, я просто не думал об этом! Но если кто-то еще находится в такой же ситуации:

Когда я вхожу в систему, я сохраняю токен доступа:

$facebook = new Facebook(array(
    'appId' => <insert the app id you get from facebook here>,
    'secret' => <insert the app secret you get from facebook here>
));

$accessToken = $facebook->getAccessToken();
//save the access token for later

Теперь, когда я делаю запросы в facebook, я делаю что-то вроде этого:

$facebook = new Facebook(array(
    'appId' => <insert the app id you get from facebook here>,
    'secret' => <insert the app secret you get from facebook here>
));

$facebook->setAccessToken($accessToken);
$facebook->api(... insert own code here ...)
person Arjay Waran    schedule 25.05.2012
comment
Я люблю тебя за этот ответ! Это спасло меня от проблемы, связанной с новыми критическими изменениями от 5 декабря. Я исследовал это несколько дней. - person hugo der hungrige; 30.11.2012
comment
Боже мой, просто потратил 2 часа на поиски этого, и я тоже забыл установить свой сохраненный токен. bleh. - person Ryan; 22.03.2013

Через определенное время ваш токен доступа истекает.

Чтобы предотвратить это, вы можете запросить разрешение offline_access во время аутентификации, как указано здесь: Срок действия токенов доступа Facebook Oauth 2.0 истекает?

person Jeroen    schedule 17.05.2011

Была та же проблема, и решение было повторно авторизовать пользователя. Проверьте это здесь:

<?php

 require_once("src/facebook.php");

  $config = array(
      'appId' => '1424980371051918',
      'secret' => '2ed5c1260daa4c44673ba6fbc348c67d',
      'fileUpload' => false // optional
  );

  $facebook = new Facebook($config);

//Authorizing app:

?>
<a href="<?php echo $facebook->getLoginUrl(); ?>">Login con fb</a>

Сохранил проект и открыл его в моей тестовой среде, и он снова заработал. Как и я, вы можете прокомментировать свой предыдущий код и попробовать.

person Daniel    schedule 14.11.2013

У меня такая же проблема при попытке получить информацию о пользователях без авторизации.

Перед любым запросом проверьте, есть ли у вас авторизация.

 $uid = $facebook->getUser();

 if ($uid){
      $me = $facebook->api('/me');
 }

Приведенный выше код должен решить вашу проблему.

person Vlad    schedule 21.11.2013

У меня была такая же проблема, но я могу решить эту проблему, очистив файлы cookie и кеш в моем браузере (ctrl+shift+R). Кроме того, вы должны убедиться, что ваш токен доступа активен.

Надеюсь, это поможет вам решить вашу проблему.

person Faisal    schedule 30.10.2017