2011-01-26 8 views
8

ho utilizzare questo codicepulsante di logout di Facebook e reindirizzare dopo il logout

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

per creare un pulsante fb login/logout. Tutto funziona, dopo il login, il pulsante di accesso diventa un pulsante di disconnessione. Ma se l'utente fa clic sul pulsante di disconnessione, la pagina corrente non viene aggiornata e quindi tutte le cose che dovrebbero apparire solo quando l'utente è autenticato sono ancora lì finché non viene effettuato un aggiornamento manuale della pagina.

Questo non succede se ho reso l'URL di disconnessione (Javascript SDK)

$logoutUrl = $facebook->getLogoutUrl(); 

e quindi implementare un pulsante di logout me stesso; in tal caso viene passato un parametro "next" corretto (con l'url della pagina corrente) e la pagina corrente viene ricaricata.

Vorrei ancora utilizzare la prima soluzione, è possibile utilizzare il parametro "successivo"?

+0

@Piskvor ho provato questo, ma di nessun aiuto finora http://facebook.stackoverflow.com/questions/8066589/when-i-hit-logout-button-i-want-to-run- a-javascript-function –

risposta

14

Do il redirect da soli - aggiungere questo a JavaScript, da qualche parte dopo FB.init():

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

Questa funzione si attiva quando il logout tramite il pulsante FB accade.

+0

Funziona perfettamente, grazie mille. Avrei dovuto notare che nel mio codice di esempio c'era già un FB.Event.subscribe ('auth.login', function() {window.location.reload()}); per la parte di accesso. Fare lo stesso per il logout è il modo giusto. – Eugenio

+1

@Eugenio: prego. Stavo facendo esattamente la stessa cosa qualche mese fa, presumo che questo sia un problema abbastanza comune :) – Piskvor

+0

Tu sei l'uomo. Ho passato giorni a cercare questa risposta – WitnessTruth

1

Sopra la risposta di Piskvor ha fatto per me. È pazzesco quante ore ho passato cercando di capirlo.

Il problema principale con plugin come questo Facebook per CakePHP è che non vengono forniti con gli aggiornamenti. Le API, in particolare quelle popolari come Facebook, cambiano continuamente perché sono imporse. Se il ragazzo che lo ha scritto inizialmente come hobby si muove con la sua vita e smette di aggiornare l'SDK, le persone meno conosciute su come alterare queste cose si bloccano.

codice di lavoro:

Tuttavia, grazie per una grande soluzione Piskvor, ecco il mio pezzo di codice per

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} 
}; 

Il pezzo chiave del codice qui è:

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

Per favore non aggiungere "grazie" come risposta. Investi un po 'di tempo nel sito e otterrai sufficienti [privilegi] (http://stackoverflow.com/privileges) per sviare le risposte che ti piacciono, che è il modo di Overflow dello stack di dire grazie. – Jack

1

Per l'autenticazione integrata (Facebook + Asp.Net MVC), uso solo Javascript e FormsAuthentication.SignOut();

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