2011-07-27 60 views
3

這讓我瘋狂。用戶登錄到我的Facebook應用程序,做一些東西。然後去Facebook並註銷。我有一段時間每隔一段時間調用一次FB.getLoginStatus()來查看用戶是否仍然登錄。但每當調用FB.getLoginStatus()時,它都會返回一個帶有會話對象的響應。 WTF?它不應該返回undefined/unknown嗎?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); 

我查和雙重檢查正請求與允許的權限。我只需要電子郵件和短信。那麼......有什麼建議?

回答

0

嘗試initializating FB與

status: false 

所以,當你想到它會工作。它爲我工作

0

您確定會話在用戶註銷時總是被破壞嗎?也許這只是會話中的一個var,如果用戶登錄或更改,則會發生變化....?

+0

我無法知道用戶何時註銷,因此我不知道何時銷燬會話。如果FB.getLoginStatus返回正確的狀態,那麼我可以摧毀我的一切。 – dbme

2

我有使用您的代碼相同的問題。 我說服了它迄今爲止的唯一方法是初始化SDK每次登錄狀態查詢:

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); 

這樣,我總是得到正確的會話狀態。如果有更有效的方法來做到這一點,請讓我知道!

2

不要這樣做的困難。這種情況有一個簡單的解決方案,只需添加一個「真正」語句作爲第二個參數從getLoginStatus方法:

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

只是要小心和注意,這個函數每次調用會讓你的應用程序去Facebook的服務器,並可以給你一個相當數量的網絡負載取決於你的實施。希望這可以幫助!

+1

正是我期待的! –

相關問題