Botón de inicio de sesión de Facebook: ¿Puedo evitar la recarga automática de la página después de iniciar sesión?

Intento actualizar al SDK 3.1 y encontrar un comportamiento problemático: cuando inicio sesión con el botón de inicio de sesión de FB en mi sitio, la página se vuelve a cargar, a pesar de que tengo mi propio método JS definido en el botón de inicio de sesión “. evento onlogin “.

Debido a que la página se vuelve a cargar instantáneamente, parece que mi propia secuencia de comandos “onlogin” (que comprueba el usuario de FB y los registra en MI sitio) parece cortarse o no se dispara. Por lo tanto, el usuario no puede iniciar sesión en el sitio.

El otro efecto secundario es peculiar: después de iniciar sesión en FB vi el botón FB de mi sitio, apareceré como usuario registrado en Facebook.com, pero luego de unos segundos aparecerá una ventana emergente en Facebook.com que dice “No estoy conectado”. Por favor inicie sesión para continuar (SÍ NO). ”

Como de costumbre, no puedo encontrar ayuda en los documentos y estoy muy perplejo. Aquí está mi inicio de FB:

 window.fbAsyncInit = function() { FB.init({ appId: '', cookie: true, xfbml: true, oauth: true }); FB.Event.subscribe('auth.logout', function(response) { window.location = '/signout.php5'; }); }; (function() { var e = document.createElement('script'); e.async = true; e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; document.getElementById('fb-root').appendChild(e); }());  

El botón de inicio de sesión es:

  

EDITAR También he intentado este código de botón sin ninguna de las opciones o el evento “onlogin” y obtengo el mismo comportamiento.

Entonces mis preguntas:

  • ¿Se espera que la página se vuelva a cargar después de que uno inicie sesión mediante el botón de inicio de sesión, aunque no haya suscrito el evento auth.login en mi FB.init?
  • Si es así, ¿hay alguna manera de anular ese comportamiento?
  • ¿Hay algo más mal aquí?

Ha adjuntado un controlador de eventos para cerrar sesión pero no para iniciar sesión. Agrega esto.

 FB.Event.subscribe('auth.login', function(response) { return false; }); 

Aunque, prevenir la recarga probablemente no sea lo que quieres hacer. En cambio, lo que he encontrado que funciona bien es detectar si el usuario ha hecho clic en el botón de inicio de sesión o no. El proceso es

  1. En la carga de la página (bueno, en realidad después de FB.init), Facebook iniciará sesión automáticamente.
  2. Debe manejar este inicio de sesión y registrar al usuario en su sitio a través de una llamada ajax. Después de que este inicio de sesión sea exitoso, configure una variable JS que indique que el usuario ha iniciado sesión.
  3. Adjunte un evento al botón de inicio de sesión. Una vez que el usuario ‘hace clic’ en el botón de inicio de sesión, verifique si están conectados y actualice la página.

Ok, descubrí la causa de las recargas de página aparentemente incontrolables

Por algún motivo, el evento auth.logout se activaba cada vez que iniciaba sesión en el prompt de inicio de sesión de Facebook.

Así que cambié esta línea:

 FB.Event.subscribe('auth.logout', function(response) { window.location = '/signout.php5'; }); 

a

 FB.Event.subscribe('auth.logout', function(response) { return false; }); 

Use esto como su Botón de inicio de sesión, creo que debe haber algo en su fbLogin (); param que está recargando la página. Comportamiento normal es solo actualizar el botón, la actualización de la página debe ser forzada con Event.subscribe.