簡體   English   中英

區分未登錄的Facebook用戶與已登錄的Facebook用戶,但尚未授權我們的應用程序

[英]Differentiate a not-logged-in Facebook user vs. a logged-in Facebook user but not authorize our application yet

使用JavaScript代碼為Facebook邀請朋友時遇到一些麻煩。 細節:

  1. 用戶Facebook A已經授權了我們的Web應用程序,並授予我們脫機訪問其訪問令牌的權限。

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

  3. 在同一瀏覽器中 ,A打開一個新選項卡,然后注銷Facebook。

  4. 用戶B借用A計算機 ,然后使用其帳戶Facebook Facebook B登錄Facebook。

  5. 他轉到我們的網站(A已打開的選項卡),然后單擊“邀請朋友”。 該列表顯示用戶B的所有朋友,而不是用戶A的所有朋友

這種情況(盡管很少發生)使我們的小組測試人員感到困擾,因為這可能會導致我們的Web應用程序發生意外行為(用戶可能會認為他同步了錯誤的Facebook帳戶)。

為了阻止這種情況,我想通過用戶授權我們的應用程序(用戶A)來區分當前登錄的Facebook用戶(用戶B)。 目前,我正在像這樣檢查:

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',並且他已經授權了我們的應用程序:response.session.uid = X_FacebookId->好的,我們知道他是誰
  2. 如果用戶X未登錄Facebook,則response.session == undefined
  3. 如果用戶X與Facebook用戶X'登錄,並且尚未授權我們的應用程序,則response.session == undefined

因此,我無法區分情況2與情況3。在這兩種情況下,getLoginStatus的結果都是相同的,但我想用不同的方式解決它:

  • 情況2->繼續調用該函數以使“登錄對話框”彈出
  • 情況3->通知用戶他已經登錄了錯誤的Facebook帳戶。

有什么解決方案嗎? 任何想法將不勝感激。

getLoginStatus()返回一個Json對象,類似於:

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

not_authorized表示他們已登錄Facebook,但尚未授權您的應用程序; connected表示他們已授權該應用程序; unknown表示他們未登錄到Facebook。

(來自內存,所以可能不准確)

另外,您可能要考慮偵聽auth事件,這可能會使此問題更容易。 http://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM