2011-06-03 12 views
2

私は、CodeIgniterフレームワークのgithub.com/facebookで修正版php-sdkバージョン3.0.0サンプルコードをヘルパーとして使用しています。Facebook Graph APIのログアウト時にOAuthExceptionが発生しました。

私の問題は、タイトルが言うだけのようである:私は戻って同じページにリダイレクトされています($Facebook->getLogoutUrl()提供)ログアウトアンカーをクリックして、OAuthExceptionを受け取った場合:

Fatal error: Uncaught OAuthException: Error validating access token: The session is invalid because the user logged out. thrown in [...]/base_facebook.php on line 959 

私が更新すると、それがロードされます通常のように「ログイン」アンカー。最初のリダイレクトで起こっていないリフレッシュ/ポストバックで何が起こっていますか?

私はこれが限られた情報であることを認識していますが、問題によって私は簡単な解決策になると思います。

EDIT:この投稿は関連があると思わ:http://forum.developers.facebook.net/viewtopic.php?id=71219

具体的に、この行:

setcookie('fbs_'.$facebook->getAppId(), '', time()-100, '/', '.domain.com'); 

は、しかし、私はこれを実装して、まだ$facebook->getLogoutUrl();を使用するかどうかはわかりません。

ありがとうございます。詳細情報が必要な場合はお知らせください。

答えて

2

私は同じ問題を抱えていて、ほとんど私の髪を引っ張っていました。しかし、いくつかの調査の後、問題は問題のあるクッキーであるようです。ログアウト時にこの行は、それを修正する必要があります

setcookie('fbs_'.$facebook->getAppId(), '', time()-100, '/', '.domain.com');

「を追加することを確認してください。サブドメインが使用されている場合はドメイン名の前に '。

こちらがお役に立てば幸いです。

+0

そう、私はFacebookの開発者フォーラムでもそれを見つけました。出典:http://forum.developers.facebook.net/viewtopic.php?pid=273884#p273884 –

1

あなたのエラーの外見から、あなたのウェブサイトはまだSDKを使用してFacebookに接続しようとしているようです。 Facebookが提供するログアウト機能を実行するときは、Facebookに呼び出されたセッションやストレージをクリアしてください。

あなたのFacebookログアウトを試行する前にクリアされていない可能性があります。このため、まだ接続していると思っていますが、最新の状態で正常に動作しています。

私がやってしまったことは、このでした
+0

問題のように見えます。私は期待していた処理するための簡単な方法がありました私の自身のログアウトURLを作成するよりも(難しいことではありませんが)facebook.comから私のdomaへのリダイレクトでセッションがクリアされないのはなぜですか?しかし、それはリフレッシュするだろうか? –

1

:ログアウト時に
$_SESSION = array();
$this->load->view('myoriginalview');

、FacebookのログアウトURLのクエリ: 'ログアウト' のコントローラで次に

  1. $facebook->getLogoutUrl(array('next' => site_url('logout')));
  2. 文字列redirect_uriの値が 'logout'コントローラにリダイレクトされ、セッションをクリアしてビューを読み込みます最初にログアウトボタンが存在していました。すべてがうまく機能します。今、私はちょうどログアウトユーザー-_-とは対照的に、期限切れのセッションを処理する方法を把握する必要があり

    EDIT:
    私が今やったことの説明として、適切な方法でクッキーを無効ですFacebookの開発者フォーラム私は本当に彼らのドキュメンテーションがより良いとPHPのSDKのためにこれを説明したい。

2

示唆したように、私が試した:

setcookie('fbs_'.$facebook->getAppId(), '', time()-100, '/', '.domain.com');

をこれは動作しませんでした。私が何をしたか、単にFBのサンプルコードからコピーした:

// Get User ID 
$user = $facebook->getUser(); 

// We may or may not have this data based on whether the user is logged in. 
// 
// If we have a $user id here, it means we know the user is logged into 
// Facebook, but we don't know if the access token is valid. An access 
// token is invalid if the user logged out of Facebook. 

if ($user) { 
    try { 
     // Proceed knowing you have a logged in user who's authenticated. 
     $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
     error_log($e); 
     $user = null; 
    } 
} 

// Login or logout url will be needed depending on current user state. 
if ($user) { 
    $logoutUrl = $facebook->getLogoutUrl(); 
} else { 
    $loginUrl = $facebook->getLoginUrl(); 
} 

中央部、USER_PROFILEを取得しようとした場合、ユーザーのプロファイルを取得するための試験であり、それが失敗した場合、ユーザーIDが設定解除されますと。これにより、getLoginUrl()とgetLogoutUrl()の最後の部分が正しくなります。

私はクッキーを設定すると、要求を試してみて、それが失敗したかどうかを確認するよりも、より正確である...しかしますsetcookieが機能しなかったことから、私は選択肢を持っていなかったと信じていない:(

愚か実際にユーザがログアウトされ、この$user = $facebook->getUser();、とトークンを返しFacebookの。これは必要としている人々に役立ちます

希望。

関連する問題