0

我在使用JavaScript代碼爲Facebook邀請朋友時遇到一些麻煩。詳細信息:區分未登錄的Facebook用戶與已登錄的Facebook用戶但未授權我們的應用程序

  1. User Facebook A已經授權我們的Web應用程序,並授予我們離線訪問其訪問令牌的權限。

  2. 用戶A登錄我們的網站。系統檢測到A將他的賬戶(在我們的網上)與Facebook同步,因此它從Facebook檢索A的信息。

  3. 在同一瀏覽器中,A打開一個新選項卡,並退出Facebook。

  4. 爲用戶B借用計算機,然後登錄Facebook的但他帳號:用戶的Facebook B.

  5. 他移動到我們的網站(即一個已經打開的標籤),並單擊「邀請朋友」。 該列表顯示了用戶B的所有朋友,而不是用戶A

這種情況(雖然很少發生),我們的困擾組的測試,因爲這可能會導致非預期的行爲,我們的Web應用程序(一個用戶可能會認爲他同步錯誤的Facebook帳戶)。

要停止這種情況,我想要區分當前登錄的Facebook(用戶B)和用戶授權我們的應用程序(用戶A)的人員。目前我正在檢查這樣的:

function showInvitationDialog() { 

      FB.init({ 
        appId:'${appId}', 
        cookie: false, 
        status: true, 
        xfbml: true 
       }); 

      FB.getLoginStatus(function (response) { 
       if (response.session) { 
        if (response.session.uid != ${fbId}) { 
         alert("You are currently logged in to FB with another account (different to the account you registered). Please make sure that you don't accidently use others FB account to invite"); 
         return; 
        } 
       } 

       var request_ids = FB.ui({ method: 'apprequests', 
            message: '<@spring.message code="friends.invitation.message" />', 
            data: 'hello'}); 
      }); 
    } 

上面的代碼適用於大多數情況下,但有一個問題:

  1. 如果用戶X已登錄Facebook的用戶X」,他授權我們我們知道他是誰
  2. 如果用戶X沒有登錄到Facebook,response.session == undefined
  3. 如果用戶X用Facebook用戶X登錄',而且他還沒有聲明我們的應用程序,response.session == undefined

所以我不能分辨的情況下2比3的情況下在這兩種情況下,從getLoginStatus的結果是一樣的,但我想以不同的方式解決這個問題:

  • 情況下2 - >繼續調用函數讓「登錄對話框」彈出
  • 情況3 - >通知用戶他已登錄到錯誤的Facebook 帳戶。

這種情況有什麼解決辦法嗎?任何想法將不勝感激。

回答

1

getLoginStatus()返回一個JSON對象是這樣的:連接

{ 
    status: one of 'not_authorized'/'connected'/'unknown' 
    authResponse: .... 
} 

NOT_AUTHORIZED意味着他們登錄到Facebook上,但沒有授權你的應用程序, 意味着他們已授權的應用程序, 未知的手段,他們沒有登錄到Facebook。

(從內存中,因此可能不準確)

而且,你可能要考慮監聽AUTH事件,這可能使這個問題更容易。 http://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/

+0

實際上,我收到的狀態是:notConnected/connected/unknown。但無論如何感謝您的指導:) –

+0

因此,FB仍然不斷改變他們的API ... –

相關問題