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:

Firebug

È stato utile?

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.

Come puoi vedere nell'articolo, l'oggetto risultato di autorizzazione ha tre valori di "metodo" di diverso stato:

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top