2011-12-23 14 views
0

はどのようにして、しばらく前のFacebookに署名した人々に対処することになっています。あなたのサイトに来てください(Facebookにすでにログインしていることが検出されたので)リンクを継続してください。そして、このページにあなたがこのエラーを表示します。FacebookのPHP SDK - OAuthException - のOAuth2

Fatal error: Uncaught OAuthException: An active access token must be used to query information about the current user. thrown in /var/www/html/lib/base_facebook.php on line 1039

私はあなたがこれを防ぐことになっているか理解していませんか?これは、あなたがFacebookに返信してaccess_tokenを取得するという署名された情報と関係がありますか?署名された情報が期限切れになるようです(発行日はdateです)。あなたのウェブサイトの流れでこれを処理する正しい方法は何ですか?これに代えて

<?php 
$user = $facebook->getUser(); 
try { 
    // attempt to do a call just to see if you are going to have this issue 
    $profile = $facebook->api('/me'); 
} catch (Exception $e) { 
    $user = false; 
} 
if ($user) { ?> 
    <a href="start.php">Begin</a> 
<?php } else { ?> 
    <fb:login-button scope="email" size="large">Connect</fb:login-button> 
<?php } ?> 

は、あなたがこのようなコードを記述することが期待される

<?php 
$user = $facebook->getUser(); 
if ($user) { ?> 
    <a href="start.php">Begin</a> 
<?php } else { ?> 
    <fb:login-button scope="email" size="large">Connect</fb:login-button> 
<?php } ?> 

はバックのFacebook SDKから$ユーザーの取得のみクッキーがあるあなたを教えているようです。 API呼び出しを行うときに実際に動作するかどうかはわかりません。

UPDATE: したがって、この方法では、私の唯一の問題は...ユーザーが自分のサイト上でクッキーを持っていますが、API呼び出しが失敗したときに - 私はそれらを接続ボタンを示しています。ユーザーが接続ボタンをクリックすると、すぐに表示され消えます。実際に発生した「auth.login」ではないため、JavaScriptリダイレクトを介してstart.phpページに送信されることはありません。どのように他の人はこれを処理するのですか私は困惑している。どうやってこれをしようとしているのか他の欠陥があるかどうか教えてください。

+0

ドメイン名app_idとapp_secretが両方のサイト(fbユーザーが存在することを確認したサイトとリダイレクト先のサイト)で同じであることを確認しましたか?そして、最初のサイトでfacebookオブジェクトを初期化するために使用されるドメインは、次のサイトでより高いレベルのドメインでなければなりません。 –

+0

これはすべて同じサイトにあります。正常にログインした後、/(またはindex.php)からstart.phpにユーザをリダイレクトしたいと思っています – BuddyJoe

答えて

0

は、あなたがこのようなコードを記述することが期待される:

はい、あなたはOAuthExceptionを処理する必要があります。

むしろFBMLのログインボタンを使用するよりも、あなたのアプリケーションのためのFacebookのログインURLにユーザーをリダイレクトすることができます。 Facebook PHP SDKで提供されている関数getLoginUrlを使用してURLを取得することができます。詳細については、getLoginUrlを参照してください。あなたは、配列次使用することができ、電子メールへのアクセス権のための

$params = array('scope' => 'email'); 

は一度正常にログイン、ユーザーが戻ってFacebookのログインに彼をリダイレクトアプリケーションページにリダイレクトされます。

+0

私にあなたに聞かせてください...これはログインにも組み込むのが一般的ですか?あなたのFacebookのログインが古くなった場合(言い換えれば、Facebookに1日中ログインしたままになっている場合)、Javascript SDKを使用して強制的にログアウトしてログインし直してください - http:// stackoverflow。com/questions/2764436/facebook-oauth-logout – BuddyJoe

+0

ユーザーをgetLoginUrlにリダイレクトしても、彼をフェイスブックからログアウトしているわけではありません。つまり、ユーザーの状態がわからず、facebbokで確認したいということです。 AFAログインしたユーザーのアクセストークンがないことを理解しています。言い換えれば、あなたのアプリにはユーザーの "the"情報を問い合わせる権限がありません。あなたがアクセストークンを持っているなら(クエリのために)、あなたはうまくいかなければなりません。しかし、あなたはしませんでした。アクセス権が不足しているか、ユーザーがログアウトしているか、またはセッションを読み取れなかったことを意味します(CookieまたはGETから)。この場合、ユーザーはFacebookのログインにリダイレクトされます –

1

は、ユーザーがアプリケーションを承認したことを確認するAPI呼び出しにアクセストークンを渡して試してみてください。以下は私がやることです、あなたが得ているOAuthExceptionを緩和するのに役立ちます。

$user = $facebook->getUser(); 

if($user) { 
    $access_token = $facebook->getAccessToken(); 
    $params = array('access_token' => $access_token); 
    try { 
     $me = $facebook->api("/me", $params); 
    } catch(FacebookApiException $e) { 
     $user = null; 
    } 
} 

if($me) { 
    // proceed with authenticated user with an active access token. 
}