NOTA: la nostra applicazione (web) funzionava correttamente fino all'aggiornamento al flusso di lavoro Oauth 2.0 lo scorso weekend.FB auth.logout viene sollevato dopo aver effettuato l'accesso utilizzando "server-side-workflow" (OAuth 2.0)
Quando un utente "si connette con facebook" alla nostra applicazione (web), le registra su Facebook utilizzando il "flusso di lavoro lato server" descritto nello . Tuttavia, Facebook sta sollevando l'evento auth.logout quando l'utente arriva a loro home page nella nostra applicazione, che contiene il seguente codice javascript:
window.fbAsyncInit = function() {
FB.init({appId: 'XXX', status: true, cookie: true, xfbml: true, channelUrl: 'http://XXX/fbchannel.html', oauth: true});
FB.Event.subscribe('auth.logout', function(response) {
logout();
});
};
(function() {
var e = document.createElement('script');
e.type = 'text/javascript';
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
function logout(){
new Ajax.Request('http://XXX/logout');
}
Sembra che mentre l'utente è connesso a Facebook, che non vengono registrati nella nostra applicazione (se hai facebook.com aperto in una seconda scheda del tuo browser e ricarichi la pagina dopo esserti autenticato dalla nostra applicazione, vedrai che sei effettivamente collegato a facebook.com).
C'è un ulteriore passaggio in OAuth 2.0 che è necessario eseguire per registrare l'utente nella nostra applicazione quando si utilizza il "flusso di lavoro sul lato server" che non era necessario nella versione precedente di OAuth? L'utente deve accedere esplicitamente tramite Facebook dopo essere stato connesso?
Qualsiasi aiuto sarebbe molto apprezzato.
Grazie in anticipo, Jason
PS- registrazione nella nostra applicazione tramite il flusso lato client (dopo aver collegato in precedenza) funziona bene. È solo quando ci si connette e si esegue l'accesso tramite il flusso di lavoro lato server, ma si verifica il problema di disconnessione automatica.
sono stato in grado di risolvere questo problema con l'aggiunta di una chiamata a FB.getLoginStatus nel mio gestore di eventi auth.logout e controllando la risposta per un oggetto authResponse. Non so perché Facebook solleva il file auth.logout quando FB.getLoginStatus restituisce una authResponse che indica che l'utente ha effettuato l'accesso, ma lo fa. Quindi, questo è un trucco: FB.Event.subscribe ('auth.logout', function (response) { FB.getLoginStatus (function (res) { if (! Res.authResponse) { logout(); } }); }); – Jason
Grande scoperta! Mi chiedo se si verifica ancora o se Facebook ha risolto questo ... – DMCS
Ho appena iniziato a vedere questo comportamento nella mia applicazione oggi pure. Mi sono inventato lo stesso trucco di te, ma mi sento un po 'a disagio. –