2011-01-26 19 views
8

que utilizan este códigoFacebook botón de cierre de sesión y cierre de sesión después de redirigir

<fb:login-button autologoutlink="true" perms="user_likes" size="large"></fb:login-button> 

para crear un botón fb de conexión/desconexión. Todo funciona, después del inicio de sesión, el botón de inicio de sesión se convierte en un botón de cierre de sesión. Pero si el usuario hace clic en el botón de cerrar sesión, la página actual no se actualiza y, por lo tanto, todas las cosas que deberían aparecer solo cuando el usuario está autenticado siguen allí hasta que se realice una actualización manual de la página.

Esto no sucede si tengo la URL de cierre de sesión (Javascript SDK)

$logoutUrl = $facebook->getLogoutUrl(); 

y luego implementar un botón de cierre de sesión a mí mismo; en ese caso, se pasa un parámetro apropiado "siguiente" (con la url de la página actual) y se vuelve a cargar la página actual.

Todavía me gustaría utilizar la primera solución, ¿es posible usar el parámetro "siguiente"?

+0

@Piskvor He intentado esto, pero de ninguna ayuda hasta ahora http://facebook.stackoverflow.com/questions/8066589/when-i-hit-logout-button-i-want-to-run- a-javascript-function –

Respuesta

14

Haga lo mismo redirigir - añadir esto a JavaScript, en algún lugar después FB.init():

<script> 
    FB.Event.subscribe("auth.logout", function() {window.location = '/logout'}); 
</script> 

Esta función se disparará al cierre de sesión a través del botón FB pasa.

+0

Funciona perfectamente, muchas gracias. Debería haber notado que en mi código de ejemplo ya había aFB.Event.subscribe ('auth.login', function() {window.location.reload()}); para la parte de inicio de sesión. Hacer lo mismo para el cierre de sesión es la forma correcta. – Eugenio

+1

@Eugenio: De nada. Estuve haciendo exactamente lo mismo hace unos meses, supongo que este es un problema bastante común :) – Piskvor

+0

Eres el hombre. Pasé días buscando esta respuesta – WitnessTruth

1

Sobre la respuesta de Piskvor lo hizo por mí. Es una locura cuántas horas he pasado tratando de resolver esto.

El principal problema con los complementos como este Facebook para CakePHP es que no vienen con actualizaciones. Las API, especialmente las populares, como Facebook, cambian todo el tiempo porque están siendo mejoradas. Si el chico que lo escribió inicialmente como un hobby sigue adelante con su vida y deja de actualizar el SDK, las personas que son menos conocedoras de cómo alterar estas cosas se atascan.

CÓDIGO DE TRABAJO:

No obstante, gracias por una gran solución Piskvor, aquí está mi pedazo de código para

apps/plugins/facebook/views/helpers/facebook.php 

      $init .= $this->Html->scriptBlock(
<<<JS 

window.fbAsyncInit = function() { 
    FB.init({ 
     appId : '{$appId}', 
     session : {$session}, // don't refetch the session when PHP already has it 
     status : true, // check login status 
     cookie : true, // enable cookies to allow the server to access the session 
     xfbml : true // parse XFBML 
    }); 
    FB.Event.subscribe("auth.logout", function() { 
     window.location = '/users/logout' 
    }); 
    {$callback} 
}; 

La pieza clave de código aquí está:

 FB.Event.subscribe("auth.logout", function() { 
     window.location = '/users/logout' 
    }); 
    {$callback} 
+0

Por favor, no agregue "gracias" como respuestas. Invierta un poco de tiempo en el sitio y obtendrá suficientes [privilegios] (http://stackoverflow.com/privileges) para enviar respuestas que le gusten, que es la forma de Desbordamiento de pila de decir gracias. – Jack

1

Para autenticación integrada (Facebook + Asp.Net MVC), solo uso Javascript y FormsAuthentication.SignOut();

function LogoutFacebook() {  
FB.logout(function (response) { 
    window.location = "/facebook/logout/"; 
}); } 
Cuestiones relacionadas