2012-01-11 7 views
15

Sto tentando di accedere un utente di facebook con il Facebook SDK JS, tuttavia chiamando:Facebook JS SDK FB.logout() non termina sessione utente

FB.logout(function(response){ 
    console.log(response); 
}); 

rendimenti: Response.Status == "connected"

E solo dopo aver aggiornato la pagina, l'SDK si rende conto che la sessione è terminata. Qualcuno sa cosa potrebbe causare questo comportamento? Questo codice ha funzionato in precedenza nella mia applicazione e recentemente ha iniziato a comportarsi in questo modo.

Un altro esempio utilizzando Firebug:

enter image description here

+0

Quando si chiama il logout e prima di aggiornare la pagina, se si va su Facebook siete ancora connessi? Se si chiama il logout due volte di fila, è la stessa risposta? (se no, non è solo una questione di tempo tra le chiamate e la risposta?) (E, anche se non risponde alla parte "perché", non è possibile risolvere questo ricaricando la pagina nella risposta?) Oh e, ultimo, "undefined" è un altro console.log presumo? –

+0

@Flow 'S, Yes' undefined 'è un log della console non pertinente. FB.logout() disconnette l'utente da Facebook, ma l'oggetto FB della pagina corrente non se ne rende conto fino a dopo un aggiornamento. Preferisco fortemente non dover aggiornare manualmente la pagina dopo che l'utente si è disconnesso. Inoltre ho tentato di eliminare il cookie fbsr_ per vedere se questo rimosso - nessun effetto. Questo ha funzionato in precedenza e solo recentemente cambiato. Inoltre, ho provato lo stesso test su hulu.com che usa l'FB JS SDK, gli stessi risultati. È forse un bug nell'SDK? –

+0

Attualmente utilizzo 'FB.getLoginStatus' dal callback' FB.logout' per garantire a JS-SDK di dimenticare l'utente. –

risposta

13

https://developers.facebook.com/bugs/245362365535898?browse=search_4f112135664703a96454690 Questo è un bug nell'SDK JS che è stato corretto e dovrebbe essere inserito non troppo a lungo.
Fino ad allora è possibile effettuare le seguenti

FB.logout(function(response) { 
    FB.Auth.setAuthResponse(null, 'unknown'); 
    ... 
}); 
+0

Grazie, questo ha funzionato per me! – Mark

+0

Grazie per aver collaborato con me e risolto il mio grosso problema, l'ho apprezzato :) –

+0

L'ho provato, ma la funzione (risposta) non è mai stata eseguita, qualche idea? – simo

1

ho la stessa esperienza con la FB.Logout() non funziona come pubblicizzato. Come una soluzione che uso la sotto funzione javascript per controllare se l'utente è connesso e in caso affermativo, reindirizzare https://www.facebook.com/logout.php con l'URL della pagina successiva per caricare e il loro token di accesso:

function reallylogout() { 
     FB.getLoginStatus(function (response) { 
     if (response.authResponse) { 
      window.location = "https://www.facebook.com/logout.php?next=" + 
      'URL to redirect to' + 
      "&access_token=" + response.authResponse.accessToken; 
     } else { 
      $("#loginButtonDiv").show(); 
      $("#logoutButtonDiv").hide(); 
     } 
     }); 
    } 

Mostra/Nascondi po ' è solo jQuery per mostrare o nascondere i div che dispongono di un pulsante di accesso e di disconnessione. L'opzione onclick del pulsante di disconnessione attiva la funzione reallyLogout().

Questo funziona per la mia app.

+0

Funziona, ma sono davvero alla ricerca di una soluzione che possa attivare l'FB JS SDK per "dimenticare" l'utente che ha effettuato l'accesso senza eseguire un aggiornamento della pagina. Fino a poche settimane fa questo ha funzionato, e da allora non ho apportato alcuna modifica. –

3

Vedi http://hustoknow.blogspot.com/2012/01/dealing-with-zombie-facebook-cookies.html

Quando si logout, una richiesta di cross-domain viene inviato a Facebook per invalidare la sessione. Quando clicchi su ricarica, un'altra richiesta viene inviata al sito di Facebook - poiché FB riconosce che il cookie non è valido, cancella correttamente il cookie dal tuo browser.

Ho il sospetto che si tratta di un errore di regexp nel modo in cui hanno dimenticato di analizzare il cookie fbm_, introdotto di recente nell'ultimo giorno o giù di lì. Sono solo sorpreso che questa correzione non sia stata spinta.

1

Ho affrontato simile tipo di problema. Ho usato FB.getLoginStatus() dopo il logout.

-1

Potrebbe non funzionare perché non si include la chiave dell'app Facebook. Funziona per me in questo modo:

Ext.get('auth-logoutlink').on('click', function(){ 
        FB.getLoginStatus(function (response) { 
        if (response.authResponse) { 
         window.location = "https://www.facebook.com/logout.php?confirm=1&api_key=**MYAPIKEY**&next=" + 
         '**MYWEBSITEURL**' + 
         "&access_token=" + response.authResponse.accessToken; 
        } else { 
         //HIDE **LOGOUT BUTTON** 
         //SHOW **LOGIN BUTTON** 
        } 
        }); 
     }); 
0

Ok ragazzi ho trovato una soluzione per questo:

mettere in su evento onClick per il tag di logout <a> come questo

onclick="FB.logout(function() { document.location.reload(); });" 

Tutti insieme:

<a href="#" 
    id="auth-logoutlink" 
    style="float:left;font-size: small;" 
    onclick="FB.logout(function() { document.location.reload(); });"> 
    [logout] 
</a> 
0

in asp.net applicazione mvc l'ho fatto come segue.


<a href="javascript:void(0);" class="logOff">Log out</a> 

$(function() { 


    $(".logOff").click(function() { 

     //check if logout is 
     FB.getLoginStatus(function (response) { 
      console.log('inside login status'); 
      if (response.status === 'connected') { 
       // the user is logged in and has authenticated your 
       // app, and response.authResponse supplies 
       // the user's ID, a valid access token, a signed 
       // request, and the time the access token 
       // and signed request each expire 
       var uid = response.authResponse.userID; 
       var accessToken = response.authResponse.accessToken; 
       FB.logout(function (response) { 

        FB.Auth.setAuthResponse(null, 'unknown'); 

       }); 
      } else if (response.status === 'not_authorized') { 
       // the user is logged in to Facebook, 
       // but has not authenticated your app 

      } else { 
       // the user isn't logged in to Facebook. 
       console.log('response status not logged in'); 
      } 
     }); 
     window.location.href = '@Url.Action("LogOff", "Account")'; 

    }); 
+0

'FB.Auth', Auth non esiste per me utilizzando Facebook SDK 2.5. – manonthemoon

2
FB.logout(function(response) { 
    ... 
}); 

Questo metodo funziona FB.logout 100%. Il problema è che gli utenti stanno provando a chiamarlo da localhost che non funziona.

Si prega di provare a chiamarlo dal server.

+0

Nel mio caso, sì, hai ragione. Non funziona su localhost. Tuttavia non sono sicuro della tua parola (funzionante al 100%). –