2011-07-27 3 views
3

これは私を狂わせてしまいます。ユーザーが私のFacebookアプリにログインして、何かをします。その後、Facebookに行きログアウトします。ユーザーがまだログインしているかどうかを確認するためにFB.getLoginStatus()を毎回呼び出す小さなタイマーがあります。しかし、FB.getLoginStatus()が呼び出されると、セッションオブジェクトで応答を返します。 WTF?未定義/不明を返してはいけませんか?FB.getLoginStatusは、ユーザーがFacebookからログアウトした後もセッションを返します

私はFacebookのEVARへの絶対最も基本的なコールを使用しています:

FB.init({ 
    appId: 'MY APP ID', 
    cookies: false, 
    status: true, 
    xfbml: false 
}); 

FB.getLoginStatus(function (response) { 
    if (response.session) { 
     console.info("Session exists"); 
    } else { 
     console.info("Session empty"); 
    } 
}); 

setInterval(function() { 
    FB.getLoginStatus(function (response) { 
     if (response.session) { 
      console.info("Session exists"); 
     } else { 
      console.info("Session empty"); 
     } 
    }); 
}, 10000); 

私がチェックし、ダブルができるように要求されている権限をチェックします。私は電子メールとSMSだけを要求しています。だから....どんなアドバイス?

答えて

0

は、あなたが期待するように、それは動作します

status: false 

でFBをinitializating試してみてください。それは私のために働いた

0

ユーザーがログアウトしたときにセッションが常に破棄されてもよろしいですか?おそらく、ユーザーがログインまたはログアウトしたときに変更されるのはセッション内の単なるvarですか?

+0

ユーザーがログアウトするとわからないので、いつセッションを破棄するのかわかりません。 FB.getLoginStatusが正しいステータスを返していれば、私はすべてを破壊することができます。 – dbme

2

私はあなたのコードを使って同じ問題がありました。私は常に正しいセッションステータスを取得このように

setInterval(function() { 
       FB.init({ 
        appId  : 'xxxx', // App ID 
        channelUrl : 'xxxx', // Channel File 
        status  : true, // check login status 
        cookie  : true, // enable cookies to allow the server to access the session 
        oauth  : true, // enable OAuth 2.0 
        xfbml  : true // parse XFBML 
       }); 
       FB.getLoginStatus(function (response) { 
        if (response.authResponse) { 
         console.info("Session exists"); 
        } else { 
         console.info("Session empty"); 
        } 
       }); 
      }, 10000); 

: 私はこれまでのラウンドそれを得た唯一の方法は、毎回のログイン状況が照会されたSDKを初期化することです。これを行うためのより効率的な方法があれば教えてください!

2

難しい方法でそれをしないでください。この状況は、簡単な解決策を持っている、ちょうどgetLoginStatus方法から2番目のパラメータとして「」ステートメントを追加します。

FB.getLoginStatus(function (response) { 
    if (response === undefined || response.status === 'connected') { 
     // Do something after logout 
    } 
}, true); 

ただ、この関数のすべての呼び出しは、あなたを行いますのでご注意くださいと注意してくださいをアプリケーションをFacebookのサーバーに移動し、実装に応じてかなりの量のネットワーク負荷を与えることができます。お役に立てれば!

+1

私が探していたもの! –

関連する問題