2012-02-21 18 views
0

Facebook SDKで奇妙な問題に遭遇しています。私は両方のJS SDKをPHP SDKとして使用しています。 )(FB.getAuthResponse;:Facebook JS/PHP SDK

<a href="/logout/" onclick="FB.logout();">Log out</a> 

私はそのリンクをクリックした後、私は任意のJS SDKコールを実行しようとすると、のように:私はonclickを以下の使用ユーザをログアウトするには期待どおりにnullを返します。

しかし、リンクをクリックした後、PHP SDKを使用して誰かがログインしているかどうかを確認するか、次のSDK機能を使用してください:$ this-> facebook-> getAccessToken();私はまだログインしているかのように有効なトークンを返します。

私はここで何が欠けていますか? ところで、ログインを確認するPHPコードが必要ですか?

ありがとうございます!

+0

あなたは文字通りFacebookからログアウトしますか? facebook.comを開いても、まだログインしているのですか? – zerkms

+0

はい、Facebookに行くと再びログインする必要があります。 – Diederik

+0

'$ fb-> api( 'me');はPHPで何かを返しますか?私はFB PHP SDKがアクセストークンをキャッシュするだけなので、 'getAccessToken()'は常に実際の作業トークンを返しません。 – zerkms

答えて

1

PHP sdkは、アクセストークンをローカルセッションに保存します。それは大きな問題です。特に、facebookトークンの有効期限が切れ、ローカルでSDKがまだアクティブであると判断した場合は、私たちが使用する解決策は、アクセストークンがまだ有効かどうかを確認するためにアクセストークンに対してチェックするユーザーデータが必要なときです。人々は、これが(アクティブトークンを保証するための)SDKの基本的な振る舞いであるべきだと思っていますが、悲しいことにそうではありません。 これは私たちが使用するコードのスニペットです。

$graph_url = "https://graph.facebook.com/me?access_token=". $access_token; 

$response = curl_get_file_contents($graph_url); 
$decoded_response = json_decode($response); 
//Check for errors 
if ($decoded_response->error) { 
    // check to see if this is an oAuth error: 
    if ($decoded_response->error->type== "OAuthException") { 
    // Retrieving a valid access token. 
    $dialog_url= "https://www.facebook.com/dialog/oauth?" 
    . "client_id=" . FB_APP_ID 
    . "&redirect_uri=" . urlencode($redirect_url) 
    . "&scope=" . implode(',', $permissions); 
    exit("<script> top.location.href='" . $dialog_url ."'</script>"); 
    } 
    else { 
    //handle other error types 
    } 
else { 
    return $facebook-getUser(); 
} 

これは独自のgetUser関数の一部です。あなたが自分自身を実装するのに役立つことを願っています:)

+0

'私たちが使用するソリューションは、アクセストークンに対してチェックして、まだ有効かどうかを確認するユーザデータが必要なときです。 ---実際に**無効なトークンについて知っているときには違いはありません** - 本当に便利なリクエストやトークンリクエストで。そして、毎回追加のトークン要求を必要としない限り、Facebookのインプレッションはあなたよりも効率的です – zerkms