区分未登录的Facebook用户与已登录的Facebook用户,但尚未授权我们的应用程序

时间:2011-12-02 08:40:46

标签: javascript facebook-graph-api facebook facebook-javascript-sdk

我在Facebook邀请朋友使用javascript代码时遇到了一些麻烦。详细说明:

  1. 用户Facebook已授权我们的网络应用程序,并授予我们离线访问其访问权限的权限。

  2. 用户A已登录我们的网站。系统检测到A将他的帐户(在我们的网站上)与Facebook同步,因此它从Facebook检索A的信息。

  3. 在同一浏览器中,A打开一个新标签,然后退出Facebook。

  4. 用户B借用计算机,然后使用他的帐户登录Facebook但是用户Facebook B。

  5. 他移动到我们的网站(A已打开的标签页),然后点击“邀请朋友”。 该列表显示用户B的所有朋友,而不是用户A

  6. 这种情况(虽然很少发生)给我们的小组测试人员带来麻烦,因为它可能导致我们的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',他已经授权我们的应用程序:response.session.uid = X_FacebookId - &gt;好的,我们知道他是谁
    2. 如果用户X未登录Facebook,则response.session == undefined
    3. 如果用户X使用Facebook用户X'登录,并且他尚未审核我们的应用程序,则response.session == undefined
    4. 所以我不能区分案例2和案例3.在这两种情况下,getLoginStatus的结果是相同的,但我想以不同的方式解决它:

      • 案例2 - &gt;继续调用该函数让“登录对话框”弹出
      • 案例3 - &gt;告知用户他已登录错误的Facebook 帐户。

      这种情况有解决方案吗?任何想法都将不胜感激。

1 个答案:

答案 0 :(得分: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/