web-dev-qa-db-de.com

facebook Nicht erfasste OAuthException: Ein aktives Zugriffstoken muss verwendet werden, um Informationen zum aktuellen Benutzer abzufragen

Ich hatte Mühe, herauszufinden, was hier passiert ... Meine Skripte funktionierten ein wenig und hörten plötzlich auf.

Ich greife auf die API zu und erhalte ein Zugriffstoken zurück. Mit dem Zugriffstoken kann ich problemlos auf die öffentlichen Informationen eines Benutzers zugreifen. Wenn ich jedoch versuche, Informationen zu ihrem FB-Konto zu posten, erhalte ich diese Fehlermeldung.

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

Irgendeine Idee, was hier passiert? Ich benutze auch Sitzungen auf meiner Site, um interne Benutzer-IDs zu verfolgen. Nicht sicher, ob meine Sitzungen ein Problem verursachen könnten.

Dies ist mein Upload-Skript, bei dem eine Fehlermeldung angezeigt wird.

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

Suchen Sie einfach nach der aktuellen Facebook-Benutzer-ID $user und wenn diese mit null zurückgegeben wurde, müssen Sie den Benutzer erneut autorisieren (oder verwenden Sie den benutzerdefinierten $_SESSION-Benutzer-ID-Wert - nicht empfohlen).

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

Ich habe ein Tutorial geschrieben, wie man ein Bild an die Wand des Benutzers hochladen kann.

30
ifaour

Benutzen:

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

anstatt

$facebook->api('/me')

es klappt.

30
yacon

Also hatte ich das gleiche Problem, aber es lag daran, dass ich das Zugriffstoken gespeichert habe, es aber nicht benutzte. Es könnte sein, dass ich aufgrund von Terminen sehr müde bin oder vielleicht habe ich einfach nicht darüber nachgedacht! Falls sich jedoch jemand anderes in derselben Situation befindet:

Wenn ich den Benutzer anmelde, speichere ich das Zugriffstoken:

$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

Wenn ich jetzt Anfragen an Facebook mache, mache ich einfach so etwas:

$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

Nach einer bestimmten Zeit verfällt Ihr Zugriffstoken.

Um dies zu verhindern, können Sie während der Authentifizierung die Berechtigung "offline_access" anfordern, wie hier angegeben: Laufen Facebook Oauth 2.0 Access Token ab?

4
Jeroen

Ich hatte das gleiche Problem, aber ich kann dieses Problem lösen, indem ich die Cookies und den Cache in meinem Browser (ctrl+shift+R) lösche. Sie müssen auch sicherstellen, dass Ihr Zugriffstoken aktiv ist.

Ich hoffe, dies wird Ihnen helfen, Ihr Problem zu lösen.

0
Faisal

Hatte das gleiche Problem und die Lösung bestand darin, den Benutzer erneut zu autorisieren . Überprüfen Sie es hier:

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

Projekt gespeichert und in meiner Testumgebung geöffnet und es hat wieder funktioniert. Wie ich es tat, können Sie Ihren vorherigen Code kommentieren und versuchen.

0
Daniel

Ich habe das gleiche Problem, als ich versuchte, Benutzerinformationen ohne auth zu erhalten.

Prüfen Sie, ob Sie sich vor einer Anfrage angemeldet haben.

 $uid = $facebook->getUser();

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

Der obige Code sollte Ihr Problem lösen.

0
Vlad