1. ホーム
  2. php

[解決済み] facebook Uncaught OAuthException。現在のユーザーに関する情報を照会するには、アクティブなアクセストークンを使用する必要があります。

2022-02-04 15:45:01

質問内容

これについては、何が起こっているのかがわからず、悩んでいます。 私のスクリプトは少しの間うまく動いていたのですが、突然半分止まってしまいました。

APIにアクセスすると、アクセストークンが返ってきます。アクセストークンを使って、ユーザーの公開情報に問題なくアクセスすることができます。しかし、私は彼らのFBアカウントに情報を投稿しようとすると、このエラーが発生します。

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

ここで何が起こっているのか、何か思い当たることはありますか? 私のサイトでは、内部ユーザーIDを追跡するためにセッションも使用しています。私のセッションが問題を引き起こしている可能性があるかどうかはわかりません。

これは私のアップロードスクリプトで、エラーが発生する場所です。

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

解決方法は?

現在のFacebookユーザーIDをチェックするだけ $user を返した場合、ユーザーを再認証する必要があります (または、カスタムの $_SESSION ユーザーIDの値 - お勧めしません)

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

を書きました。 チュートリアル ユーザーのウォールに写真をアップロードする方法について。