在我看來,我認爲你的應用程序應該保持登錄狀態,而用戶已經登出了Facebook。
這可能不合意的一種情況是:如果我使用的是公用計算機上的應用程序,該怎麼辦?在我退出Facebook之後,您的應用仍然「記住」我。現在任何使用此計算機的人都會在您的應用程序中使用我的Facebook身份。
我認爲這裏的問題是您設置自己的cookie來記住用戶的Facebook登錄狀態。很明顯,當用戶簽署Facebook本身時,您的cookie不會被清除。因此,此時您的Cookie與Facebook狀態不同步。
我建議您不要使用自己的cookie來記住用戶的Facebook登錄狀態。總是依靠Facebook本身來達到這個目的。
一般的策略是,無論用戶何時進入您的應用,您都應該使用Facebook提供的機制來檢查Facebook登錄狀態。這樣,您的應用程序就用戶的登錄狀態而言將與Facebook同步。
我個人使用這段代碼調用Facebook上的JavaScript API用戶登錄的目的:
/*
* Init code for Facebook connect
*/
window.fbAsyncInit = function() {
FB.init({
appId : FACEBOOK_APP_ID, // App ID
channelUrl : CHANNEL_URL, // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true, // parse XFBML
oauth : true
});
// check facebook login status
FB.getLoginStatus(function(response) {
console.log("FB login status: " + response.status);
if (response.status === 'connected') {
showWelcome(); //display welcome message
} else if (response.status === 'not_authorized') {
// the user is logged in to Facebook, but not connected to the app
showFbLogin(); //display Facebook Login button
} else {
// the user isn't even logged in to Facebook.
showFbLogin(); //display Facebook Login button
}
});
// subscribe to facebook events
FB.Event.subscribe('auth.authResponseChange', function(response) {
fbAuthResponseChanged(response);
});
};
的問題是,在FBJS cookie不會在我的域名被清除時,他們登出的facebook。在退出Facebook並轉到我的應用程序後,我的應用程序仍會看到FBJS cookie。我不知道他們實際上沒有登錄,直到我加載JavaScript。這會增加一個額外的重定向,如果他們*已經登錄,因爲他們必須加載我的/登錄頁面,然後js發現他們已經登錄,並將它們重定向到/ app – 2012-02-12 05:57:52
我每次看到它的方式您的應用程序正在代表登錄用戶執行任何操作,您需要檢查用戶是否實際上仍然登錄該點。無論您的應用程序爲記住Facebook用戶的日誌記錄狀態而設置的cookie,您都不應該依賴它,或者您應該保持其與Facebook狀態同步。 – 2012-02-14 15:34:05
例如,您可以在應用程序發佈到Facebook之前每次調用FB.getLoginStatus函數。當然,這可能不是最佳的方式。 – 2012-02-14 15:42:07