登录后,将激发FB auth.logout注意:我们的(网络)应用程序工作正常,直到上周末升级到Oauth 2.0工作流程。使用“服务器端工作流程”(OAuth 2.0)
当用户“与facebook连接”到我们的(网络)应用程序时,我们使用Facebook Authentication docs中描述的“服务器端工作流程”将他们登录到Facebook。但是,Facebook正在提高auth.logout事件,当用户获取到他们的主页在我们的应用程序,它包含下面的JavaScript代码:
window.fbAsyncInit = function() {
FB.init({appId: 'XXX', status: true, cookie: true, xfbml: true, channelUrl: 'http://XXX/fbchannel.html', oauth: true});
FB.Event.subscribe('auth.logout', function(response) {
logout();
});
};
(function() {
var e = document.createElement('script');
e.type = 'text/javascript';
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
function logout(){
new Ajax.Request('http://XXX/logout');
}
看来,当用户登录到Facebook上,他们没有登录进入我们的应用程序(如果您的浏览器的第二个选项卡中打开了facebook.com,并在我们的应用程序登录后重新加载页面,您将看到您确实已登录到facebook.com)。
在使用OAuth以前版本中不需要的“服务器端工作流”时,是否需要采取OAuth 2.0中的额外步骤将用户登录到我们的应用程序中?连接后用户是否必须通过Facebook明确登录?
任何帮助将不胜感激。
在此先感谢,杰森
PS-登录到通过客户端的流量我们的应用程序(你曾经连接后)的作品就好了。只有在通过服务器端工作流连接和登录时,我们才会遇到自动注销问题。
我能够在我的auth.logout事件处理程序添加到FB.getLoginStatus呼叫并检查响应来解决这个问题对于authResponse对象。我不知道为什么Facebook在FB.getLoginStatus返回一个authResponse指示用户已经登录时提出auth.logout,但是,它确实如此。因此,这是一个黑客:FB.Event.subscribe('auth.logout',函数(响应){FB.getLoginStatus(函数(res){!res.authResponse} { logout(); } }); }); – Jason
很棒的发现!我不知道它是否仍然存在,或者Facebook是否已经修复了这个问题...... – DMCS
我刚刚开始在我的应用程序中看到这种行为。我提出了和你一样的黑客攻击,但我对它有点不舒服。 –