我在Facebook邀请朋友使用javascript代码时遇到了一些麻烦。详细说明:
用户Facebook已授权我们的网络应用程序,并授予我们离线访问其访问权限的权限。
用户A已登录我们的网站。系统检测到A将他的帐户(在我们的网站上)与Facebook同步,因此它从Facebook检索A的信息。
在同一浏览器中,A打开一个新标签,然后退出Facebook。
用户B借用计算机,然后使用他的帐户登录Facebook但是用户Facebook B。
他移动到我们的网站(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'});
});
}
以上代码适用于大多数情况,但它有一个问题:
所以我不能区分案例2和案例3.在这两种情况下,getLoginStatus的结果是相同的,但我想以不同的方式解决它:
这种情况有解决方案吗?任何想法都将不胜感激。
答案 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/