Google Login colpisce due volte?
Domanda
Sto usando Google Login tramite JS e sembra che il mio codice riceva i dati due volte. Non sono sicuro del perché questo stia accadendo.
Quando clicco il mio pulsante "Accedi con Google", sputa (console.log (Risultato)) Dati per l'utente. Quindi si verifica un prompt che mi chiede di scegliere un mio account (sono registrato in diversi account Google). Quando clicco sull'account vorrei, il codice sputa quindi di nuovo i dati utente.
Perché questo accade? È un problema perché dove sputo i dati, vorrei fare una chiamata Ajax per verificare l'utente e quindi reindirizzarle. Quindi in sostanza, sta cercando di fare questo due volte - che non è bello, cosa succede se non voglio accedere utilizzando le credenziali che Google passa nuovamente il primo andare in giro?
(function() {
var po = document.createElement('script');
po.type = 'text/javascript'; po.async = true;
po.src = 'https://apis.google.com/js/client:plusone.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(po, s);
})();
function googleLogin() {
var additionalParams = {
'callback': googleCallback
};
gapi.auth.signIn(additionalParams);
}
function googleCallback(authResult) {
if (authResult['status']['signed_in']) {
gapi.client.load('oauth2', 'v2', function() {
gapi.client.oauth2.userinfo.get().execute(function(resp) {
console.log(resp);
})
});
} else {
console.log('Sign-in state: ' + authResult['error']);
}
}
.
Aggiornamento: Se accedo a tutti i miei account Google (ad eccezione di uno e solo uno), la chiamata a Google è ancora duplicata. Questa volta accede e vedo console.log () emettendo i dati due volte. I token di accesso sono identici.
Aggiornamento 2: Console.Log (resp) Sta spostando due volte
Aggiornamento 3: Solo più chiarimenti:
Soluzione
stai incontrando due chiamate a "console.log (resp);" All'interno della funzione "GoogleCallback" perché:
.Verrà chiamata la funzione che si definisce per il tuo callback di accesso Ogni volta che l'utente ha firmato lo stato modifica
Questa citazione è presa dal "Monitoraggio dello stato della sessione dell'utente" Pagina web.
Quindi il tuo codice di richiamata viene attivato quando viene visualizzato il prompt di accesso ("Prompt") e quando appare il banner "Benvenuto" ("Auto").
Per interrompere il codice di callback da affrontare ciascun evento di trigger è possibile modificare il codice come segue:
function signinCallback(authResult) {
if (authResult['status']['signed_in']) {
// Update the app to reflect a signed in user
// Hide the sign-in button now that the user is authorized, for example:
// document.getElementById('signinButton').setAttribute('style', 'display: none');
if (authResult['status']['method'] == 'PROMPT') {
console.log(authResult['status']['method']);
gapi.client.load('oauth2', 'v2', function () {
gapi.client.oauth2.userinfo.get().execute(function (resp) {
console.log(resp);
})
});
}
} else {
// Update the app to reflect a signed out user
// Possible error values:
// "user_signed_out" - User is signed-out
// "access_denied" - User denied access to your app
// "immediate_failed" - Could not automatically log-in the user
console.log('Sign-in state: ' + authResult['error']);
}
}
.
Questo codice chiamerà solo "gapi.client.oauth2.userinfo.get ()". Se un utente è stato firmato e l'evento che attivava la callback è di tipo "Prompt".
Altri suggerimenti
Google passa sempre attraverso lo stato 'prompt', ma attraverso lo stato 'Auto' appena quando l'utente ha un precedente accesso di successo e potrebbe essere accelerato automaticamente.