2012-02-06 44 views
5

Tôi đang viết một ứng dụng web nơi người dùng sẽ cần phải đăng nhập bằng Facebook (đăng nhập Facebookless không có ý nghĩa trong ngữ cảnh của ứng dụng). Lý tưởng nhất, sau lần truy cập đầu tiên của họ, khi người dùng truy cập /index, webapp của tôi thấy cookie được lưu trữ trước đó và tự động đăng nhập người dùng một cách tự động và chuyển đến ứng dụng (/app).Đăng nhập Facebook cho trang web: Phương pháp hay nhất để xử lý đăng xuất Facebook của người dùng?

Sự cố của tôi phát sinh khi người dùng đăng xuất khỏi Facebook và quay lại ứng dụng của tôi. Vì cookie trên miền của tôi vẫn sẽ có mặt và số oauth_token của chúng tôi sẽ vẫn hợp lệ (chúng hiện trong 60 ngày), tôi vẫn có thể tự động đăng nhập người dùng và ứng dụng sẽ hoạt động như mong đợi.

Với tôi, có vẻ như ứng dụng vẫn đăng nhập bằng tài khoản Facebook của họ ngay cả khi họ không đăng nhập vào Facebook. Tôi chơi xung quanh trên Stackoverflow chính nó; nó cũng cho phép hành vi này. Lo lắng của tôi có bị thất lạc hay không hoặc có cách nào được khuyến nghị để xem liệu người dùng có đăng nhập vào Facebook hay không khi họ yêu cầu /index từ máy chủ của tôi lần đầu tiên.

Trả lời

2

Theo ý kiến ​​của tôi, tôi không nghĩ rằng ứng dụng của bạn nên duy trì trạng thái đăng nhập khi người dùng đã đăng xuất khỏi Facebook.

Một trường hợp mà điều này có thể không được mong muốn là: nếu tôi đang sử dụng ứng dụng của bạn từ máy tính công cộng. Sau khi tôi đăng xuất khỏi Facebook, ứng dụng của bạn vẫn "nhớ" tôi. Và bây giờ bất cứ ai sử dụng máy tính này sẽ giả định danh tính Facebook của tôi bên trong ứng dụng của bạn.

Tôi nghĩ rằng vấn đề ở đây là bạn đặt cookie của riêng bạn để ghi nhớ trạng thái đăng nhập Facebook của người dùng. Rõ ràng, khi người dùng đăng xuất khỏi Facebook, cookie của bạn sẽ không bị xóa. Vì vậy, tại thời điểm này cookie của bạn không đồng bộ với trạng thái Facebook.

Tôi khuyên bạn không nên sử dụng cookie của riêng mình với mục đích ghi nhớ trạng thái đăng nhập Facebook của người dùng. Luôn luôn dựa vào Facebook cho mục đích này.

Chiến lược chung là, bất cứ khi nào người dùng truy cập ứng dụng của bạn, bạn nên kiểm tra trạng thái đăng nhập Facebook bằng cách sử dụng cơ chế do Facebook cung cấp. Bằng cách này, ứng dụng của bạn sẽ đồng bộ với Facebook về trạng thái đăng nhập của người dùng.

Cá nhân tôi sử dụng đoạn mã này để gọi Facebook Javascript API cho mục đích của người sử dụng đăng nhập:

/* 
* 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

Vấn đề là, cookie FBJS không xóa trên tên miền của tôi khi họ đăng xuất facebook. Sau khi đăng xuất khỏi facebook và truy cập ứng dụng của tôi, ứng dụng của tôi vẫn thấy cookie FBJS. Tôi không thể biết họ không thực sự đăng nhập cho đến khi tôi tải javascript. Điều này bổ sung thêm một chuyển hướng nếu chúng * được đăng nhập, bởi vì chúng phải tải trang/login của tôi, trong đó js sau đó phát hiện ra chúng đã đăng nhập và chuyển hướng chúng đến/app –

+0

Cách tôi nhìn thấy nó, mọi lúc ứng dụng của bạn đang làm bất cứ điều gì thay mặt cho người dùng đã đăng nhập, bạn cần phải kiểm tra xem người dùng có thực sự còn đăng nhập vào thời điểm đó hay không. Bất kể cookie nào mà ứng dụng của bạn đặt để ghi nhớ trạng thái ghi nhật ký người dùng Facebook, bạn không nên dựa vào nó, hoặc bạn nên giữ nó trong trạng thái đồng bộ với trạng thái Facebook. –

+0

Ví dụ: bạn có thể gọi hàm FB.getLoginStatus mỗi lần trước khi ứng dụng của bạn đăng lên Facebook. Điều này có thể không phải là cách tối ưu để làm điều đó, tất nhiên. –

Các vấn đề liên quan