Facebook Uncaught OAuthException: токен активного доступа должен использоваться для запроса информации о текущем пользователе
Я изо всех сил пытался узнать, что с этим происходит.
Мои скрипты работали нормально и немного наполовину остановились.
Я получаю доступ к api, и я возвращаю токен доступа. Благодаря токену доступа я могу получить доступ к общедоступной информации пользователей. Однако, когда я пытаюсь опубликовать информацию в своей учетной записи FB, я получаю эту ошибку.
Fatal error: Uncaught OAuthException: An active access token must be used to query information about the current user.
Любая идея, что здесь происходит?
Я также использую сеансы на своем сайте для отслеживания внутренних идентификаторов пользователей. Не уверен, что мои сеансы могут вызвать проблемы.
Это моя загрузка script, где я получаю сообщение об ошибке.
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);
Ответы
Ответ 1
Просто проверьте текущий идентификатор пользователя 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);
}
Я написал tutorial о том, как загрузить изображение на стену пользователя.
Ответ 2
Использование:
$facebook->api('/'.$facebook_uid)
вместо
$facebook->api('/me')
он работает.
Ответ 3
Итак, у меня была такая же проблема, но это было потому, что я сохранял токен доступа, но не использовал его. Это может быть потому, что я супер сонный из-за сроков, или, может быть, я просто не думал об этом! Но в случае, если кто-то еще находится в той же ситуации:
Когда я регистрирую пользователя, я сохраняю токен доступа:
$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 ...)
Ответ 4
Через определенное количество времени истекает ваш токен доступа.
Чтобы предотвратить это, вы можете запросить разрешение 'offline_access' во время аутентификации, как указано здесь: Истек срок подписки Facebook Oauth 2.0?
Ответ 5
Была та же проблема, и решение заключалось в повторном авторизации пользователя.
Проверьте это здесь:
<?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>
Сохраненный проект и открыт на моей тестовой среде, и он снова работал. Как и я, вы можете прокомментировать свой предыдущий код и попробовать.
Ответ 6
У меня такая же проблема, когда вы пытались получить информацию о пользователях без auth.
Убедитесь, что у вас есть вход в систему перед любым запросом.
$uid = $facebook->getUser();
if ($uid){
$me = $facebook->api('/me');
}
Приведенный выше код должен решить вашу проблему.
Ответ 7
У меня была такая же проблема, но я могу решить эту проблему, очистив файлы cookie и кеш из моего браузера (ctrl+shift+R)
. Кроме того, вы должны убедиться, что ваш токен доступа активен.
Надеюсь, это поможет вам решить вашу проблему.