区分未登录的Facebook用户和已登录但尚未授权我们应用的Facebook用户



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

  1. 用户Facebook A已经授权我们的web应用程序,并允许我们离线访问他们的访问令牌

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

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

  4. 用户B借了一台电脑,然后用他的账号:用户Facebook B登录了Facebook。

  5. 他转到我们的网页(A已经打开的选项卡),然后点击"邀请朋友"。显示用户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',并且他已经授权我们的应用程序:response.session.uid = X_FacebookId -> ok,我们知道他是谁
  2. 如果用户X没有登录到Facebook,则响应。session == undefined
  3. 如果用户X以Facebook用户X’登录,并且他还没有授权我们的应用,响应。session == undefined

所以我不能区分情况2和情况3。在这两种情况下,getLoginStatus的结果是相同的,但我想以不同的方式解决它:

  • case 2 ->继续调用函数让"Login dialog"弹出
  • 案例3 ->通知用户他登录了错误的Facebook帐户。

对于这种情况有什么解决办法吗?

getLoginStatus()返回一个Json对象,如下所示:

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

not_authorized表示他们登录了facebook,但没有授权你的应用程序,连接意味着他们已经授权了应用程序,未知表示他们没有登录facebook。

(来自内存,所以可能不准确)

另外,您可能想要考虑侦听验证事件,这可能会使这个问题更容易解决。http://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/

最新更新