繁体   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