2012-02-06 144 views
5

我正在編寫一個Web應用程序,用戶需要使用Facebook登錄(在應用程序的上下文中,Facebookless登錄沒有意義)。理想情況下,在初次訪問後,當用戶訪問/index時,我的web應用程序會看到它之前存儲的cookie,並自動無縫登錄用戶並轉到應用程序(/app)。Facebook登錄網站:處理用戶Facebook註銷的最佳做法?

我的問題出現在用戶註銷Facebook並返回到我的應用程序。由於他們在我的域中的Cookie仍然存在,並且他們的oauth_token仍然有效(他們現在是60天),所以我仍然可以自動登錄用戶,並且該應用會按預期工作。

對我來說,即使他們沒有登錄到Facebook,應用仍然使用他們的Facebook帳戶登錄並不正確。我玩過Stackoverflow本身;它也允許這種行爲。我的擔心是否放錯了位置,或者是否有建議的方式來查看用戶是否從我的服務器首次請求/index時是否已登錄Facebook。

回答

2

在我看來,我認爲你的應用程序應該保持登錄狀態,而用戶已經登出了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); 
     }); 
}; 
+0

的問題是,在FBJS cookie不會在我的域名被清除時,他們登出的facebook。在退出Facebook並轉到我的應用程序後,我的應用程序仍會看到FBJS cookie。我不知道他們實際上沒有登錄,直到我加載JavaScript。這會增加一個額外的重定向,如果他們*已經登錄,因爲他們必須加載我的/登錄頁面,然後js發現他們已經登錄,並將它們重定向到/ app – 2012-02-12 05:57:52

+0

我每次看到它的方式您的應用程序正在代表登錄用戶執行任何操作,您需要檢查用戶是否實際上仍然登錄該點。無論您的應用程序爲記住Facebook用戶的日誌記錄狀態而設置的cookie,您都不應該依賴它,或者您應該保持其與Facebook狀態同步。 – 2012-02-14 15:34:05

+0

例如,您可以在應用程序發佈到Facebook之前每次調用FB.getLoginStatus函數。當然,這可能不是最佳的方式。 – 2012-02-14 15:42:07