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);
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); }
Я написал учебник о том, как загрузить изображение на стену пользователя.
поэтому у меня была та же проблема, но это было потому, что я сохранял маркер доступа, но не использовал его. Это может быть потому, что я супер сонный из-за сроков, или, может быть, я просто не думал об этом! Но в случае, если кто-то еще находится в такой же ситуации:
при входе в систему пользователя я сохраняю маркер доступа:
$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 ...)
через некоторое время срок действия маркера доступа истекает.
чтобы предотвратить это, вы можете запросить разрешение "offline_access" во время аутентификации, как указано здесь: Истекает Ли Срок Действия Токенов Доступа Facebook Oauth 2.0?
была та же проблема, и решение состояло в том, чтобы повторно авторизовать пользователя. Проверьте это здесь:
<?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>
сохраненный проект и открыт в моей тестовой среде, и он снова работал. Как и я, вы можете прокомментировать свой предыдущий код и попробовать.