58 votes

facebook Uncaught OAuthException : Un jeton d'accès actif doit être utilisé pour demander des informations sur l'utilisateur actuel.

J'ai eu du mal à trouver ce qui se passe avec ça. Mes scripts fonctionnaient bien pendant un moment et se sont soudainement à moitié arrêtés.

J'accède à l'API et je reçois un jeton d'accès. Avec ce jeton d'accès, je peux accéder aux informations publiques d'un utilisateur sans problème. Cependant, lorsque j'essaie de publier des informations sur leur compte FB, je reçois cette erreur.

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

Une idée de ce qui se passe ici ? J'utilise également des sessions sur mon site pour garder la trace des identifiants internes des utilisateurs. Je ne suis pas sûr que mes sessions puissent être à l'origine du problème.

Voici mon script de téléchargement où j'obtiens une erreur.

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);

32voto

yacon Points 447

Utilisez :

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

au lieu de

$facebook->api('/me')

ça marche.

31voto

ifaour Points 29213

Vérifiez simplement l'identifiant actuel de l'utilisateur de Facebook $user et s'il renvoie un résultat nul, vous devez réautoriser l'utilisateur (ou utiliser l'option de personnalisation de l'utilisateur). $_SESSION valeur de l'identifiant de l'utilisateur - non recommandé)

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);
}

J'ai écrit un tutoriel sur la façon de télécharger une photo sur le mur de l'utilisateur.

18voto

user1056778 Points 201

J'ai eu le même problème, mais c'est parce que je sauvegardais le jeton d'accès sans l'utiliser. C'est peut-être parce que je suis super endormi à cause des dates d'échéance, ou peut-être que je n'y ai tout simplement pas pensé ! Mais au cas où quelqu'un d'autre serait dans la même situation :

Lorsque je connecte l'utilisateur, j'enregistre le jeton d'accès :

$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

Maintenant, quand je fais des demandes à Facebook, je fais quelque chose comme ça :

$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 ...)

4voto

Jeroen Points 7500

Après un certain temps, votre jeton d'accès expire.

Pour éviter cela, vous pouvez demander l'autorisation 'offline_access' pendant l'authentification, comme indiqué ici : Les jetons d'accès Facebook Oauth 2.0 expirent-ils ?

0voto

Daniel Points 1

J'ai eu le même problème et la solution a été de réautoriser l'utilisateur. Vérifiez ici :

<?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>

J'ai sauvegardé le projet et l'ai ouvert dans mon environnement de test et cela a fonctionné à nouveau. Comme je l'ai fait, vous pouvez commenter votre code précédent et essayer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X