1

したがって、これは正常に機能しています...しかし、ページを2回更新すると(または、このスクリプトを含む2つのページをすばやくクリックすると)、このエラー OAuthException: An active access token must be used to query information about the current user が表示されます。何か案は?

<?php

  $app_id = '***************';
  $app_secret = '**************';
  $app_namespace = '****************';

  $app_url = 'http://apps.facebook.com/' . $app_namespace . '/';
  $scope = 'email,publish_actions';

  // Init the Facebook SDK
   $facebook = new Facebook(array(
     'appId'  => $app_id,
     'secret' => $app_secret,
   ));

   // Get the current user
   $user = $facebook->getUser();

   // If the user has not installed the app, redirect them to the Login Dialog

   if (!$user) {
     $loginUrl = $facebook->getLoginUrl(array(
       'scope' => $scope,
       'redirect_uri' => $app_url,
     ));

     print('<script> top.location.href=\'' . $loginUrl . '\'</script>');
   }

if ($user) {
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me', 'POST');
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}
//<img src="https://graph.facebook.com/?php echo $user; ?/picture">
//?php print_r($user_profile); ?
?>
4

1 に答える 1

1

個人的には、自分自身を管理する方が簡単だとaccess_token思います。Facebook の Graph API は、access_tokenが渡されることを要求することにより、保護されたエンドポイントを保護します。PHP SDK はこれを抽象化しますが、Facebook が情報を処理することに満足したことはありません。これは、ライブラリが悪いと言っているのではなく、正しく使用していないということです。この注意事項を覚えておいてください。

Facebook キャンバス アプリを使用しているようです。ユーザーが初めて認証に成功すると、Facebookaccess_token$_GET. この時点で、これをデータベースに保存する必要があります。そのアクセス トークンは 3 か月ほど有効であるためです。

その時点で、それ以降はaccess_token、呼び出しパラメーターでを渡すことができます。

try {
    $user_profile = $facebook->api('/me', 'POST', array(
        "access_token" => ''    // access token goes here
    ));
} catch (FacebookApiException $e) {
    // error handling
}

Facebook がリソースを呼び出すにはアクセス トークンが必要であるというエラーを返していることを考えると、何かを返している/meように見えます。$facebook->getUser();それが何であるかを再確認することをお勧めします。


私がここにいる間、あなたはこのロジックを使用しています:

if (!conditional) {
    // do something
}
if (conditional) {
    // do something else
}

紛らわしい。使用else:

if (conditional) {
    // do something
} else {
    // do something else
}
于 2013-03-24T21:10:32.627 に答える