web-dev-qa-db-fra.com

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

Je me suis efforcé de savoir ce qui se passait avec ça ..__ Mes scripts fonctionnaient bien depuis un moment et se sont soudainement arrêtés à moitié.

J'accède à l'API et je récupère un jeton d'accès. Avec le jeton d'accès, je peux très bien accéder aux informations publiques des utilisateurs. Cependant, lorsque j'essaie de publier des informations sur leur compte FB, j'obtiens cette erreur.

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

Avez-vous une idée de ce qui se passe ici? J'utilise également des sessions sur mon site pour suivre les identifiants d'utilisateurs internes. Pas sûr si mes sessions pourraient causer un problème.

Ceci est mon script de téléchargement où je reçois 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);
52
user401183

Il suffit de vérifier l’identifiant de l’utilisateur Facebook actuel $user et s’il renvoie null, il faut alors autoriser à nouveau l’utilisateur (ou utiliser la valeur de l’identifiant utilisateur $_SESSION personnalisé - 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 image sur le mur de l'utilisateur.

30
ifaour

Utilisation:

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

au lieu de

$facebook->api('/me')

Ça marche.

30
yacon

J'avais donc le même problème, mais c'était parce que je sauvegardais le jeton d'accès mais ne l'utilisais pas. C'est peut-être parce que je suis très fatiguée à cause des dates d'échéance, ou peut-être que je n'y ai pas pensé! Mais si quelqu'un d'autre se trouve dans la même situation:

Lorsque je me connecte à l'utilisateur, je sauvegarde 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 juste 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 ...)
18
Arjay Waran

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

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

4
Jeroen

J'ai eu le même problème mais je peux le résoudre en nettoyant les cookies et le cache de mon navigateur (ctrl+shift+R). En outre, vous devez vous assurer que votre jeton d'accès est actif.

J'espère que cela vous aidera à résoudre votre problème.

0
Faisal

Avait le même problème et la solution a été de réautoriser l'utilisateur ..__

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

Projet enregistré et ouvert sur mon environnement de test et cela a fonctionné à nouveau. Comme je l'ai fait, vous pouvez commenter votre code précédent et essayer.

0
Daniel

J'ai le même problème lorsque j'ai essayé d'obtenir des informations sur les utilisateurs sans autorisation.

Vérifiez si vous êtes connecté avant toute demande.

 $uid = $facebook->getUser();

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

Le code ci-dessus devrait résoudre votre problème.

0
Vlad