登錄後,將激發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
我剛剛開始在我的應用程序中看到這種行爲。我提出了和你一樣的黑客攻擊,但我對它有點不舒服。 –