2012-02-06 22 views
5

Estoy escribiendo una aplicación web en la que los usuarios necesitarán iniciar sesión en Facebook (un inicio de sesión en Facebook no tiene sentido en el contexto de la aplicación). Idealmente, después de su visita inicial, cuando un usuario visita /index, mi aplicación web ve una cookie que depositó anteriormente y registra automáticamente al usuario automáticamente y va a la aplicación (/app).Inicio de sesión en Facebook para sitios web: ¿la mejor práctica para manejar el cierre de sesión de Facebook del usuario?

Mi problema surge cuando el usuario cierra sesión en Facebook y regresa a mi aplicación. Como su cookie en mi dominio seguirá presente, y su oauth_token seguirá siendo válido (tienen una validez de 60 días), aún puedo iniciar sesión automáticamente y la aplicación funcionará como se esperaba.

Para mí, no parece correcto que la aplicación permanezca iniciada con su cuenta de Facebook incluso cuando no hayan iniciado sesión en Facebook. Jugué en Stackoverflow; permite este comportamiento también. ¿Se han extraviado mis preocupaciones o hay una forma recomendada de ver si un usuario inició sesión en Facebook cuando solicitó por primera vez el /index desde mi servidor?

Respuesta

2

En mi opinión, no creo que su aplicación debe permanecer iniciada mientras el usuario ya ha cerrado sesión en Facebook.

Un escenario donde esto puede no ser deseable es: ¿qué ocurre si estoy usando su aplicación desde una computadora pública? Después de cerrar sesión en Facebook, tu aplicación aún me "recuerda". Y ahora, cualquiera que use esta computadora asumirá mi identidad de Facebook dentro de tu aplicación.

Creo que el problema aquí es que establezca su propia cookie para recordar el estado de inicio de sesión de Facebook del usuario. Obviamente, cuando el usuario cierra la sesión de Facebook, su cookie no se borra. Entonces, en este punto, su cookie no está sincronizada con el estado de Facebook.

Te recomiendo que no uses tu propia cookie para recordar el estado de inicio de sesión de Facebook del usuario. Confíe siempre en Facebook para este fin.

La estrategia general es que cada vez que el usuario acceda a su aplicación, debe verificar el estado de inicio de sesión de Facebook utilizando el mecanismo provisto por Facebook. De esta forma, su aplicación estará sincronizada con Facebook en términos del estado de inicio de sesión del usuario.

Yo personalmente uso este pedazo de código para llamar a la API de Facebook Javascript con el propósito de inicio de sesión de usuario:

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

El problema es que la cookie FBJS no se borra en mi dominio cuando se inscriban fuera de facebook. Después de cerrar sesión en Facebook y acceder a mi aplicación, mi aplicación aún ve la cookie FBJS. No puedo saber que no están realmente registrados hasta que cargue javascript. Esto agrega un redireccionamiento adicional si * están * conectados, porque deben cargar mi/página de inicio de sesión, donde js luego descubre que ya han iniciado sesión, y los redirecciona a/app –

+0

La forma en que lo veo, cada vez su aplicación está haciendo algo en nombre del usuario que ha iniciado sesión, debe verificar si el usuario está realmente conectado en ese momento. Sea cual sea la cookie que establezca su aplicación para recordar el estado de registro de usuario de Facebook, no debe confiar en ella, o debe mantenerla sincronizada con el estado de Facebook. –

+0

Por ejemplo, puede invocar la función FB.getLoginStatus cada vez antes de que su aplicación se publique en Facebook. Esta puede no ser la forma optimizada para hacerlo, por supuesto. –

Cuestiones relacionadas