6

Sto utilizzando il flusso ibrido di Google Login per autenticare gli utenti ma ho uno strano bug: quando gli utenti sono disconnessi (authResult['error'] == 'user_signed_out'), lo signInCallback viene chiamato due volte! Non accade quando l'utente si collega, quindi non penso sia collegato al (piuttosto fastidioso) prompt di "Bentornato [utente]".Google signInCallback chiamato due volte quando l'utente è signed_out

Il mio codice è simile al seguente:

function signInCallback(authResult) { 
    console.log("signIn callback called, using " + authResult['status']['method'] + " method"); 
    console.log("authResult = "); 
    console.dir(authResult); 

    if (authResult['code']) { 
     // do things.... 
    }else if(authResult.error == "user_signed_out"){ 
     // do other things... 
    } 
} 

Questo è ciò che ottengo sulla console: console log http://img4.hostingpics.net/pics/968420Capture1.jpg See a larger version

Il codice HTML che sto usando:

<div id="signinButton" style="display:<?=(isset($_SESSION['userinfo'])) ? 'none' : 'inline-block'?>"> 
     <span class="g-signin" 
      data-scope="<?=join(' ',$scopes)?>" 
      data-clientid="<?=$client_id?>" 
      data-redirecturi="<?=$redirect_uri?>" 
      data-accesstype="<?=$access_type?>" 
      data-cookiepolicy="<?=$cookie_policy?>" 
      data-callback="signInCallback" 
      data-approvalprompt="<?=$approval_prompt?>" 
      data-state="<?=$_SESSION['state']?>" 
     ></span> 
    </div> 

Sono utilizzando due account Google diversi su due diversi browser. Inizialmente pensavo che fosse dovuto a ciò (Google memorizza in un cookie google_account_id e lo stato dell'utente, come). Ma ho cancellato tutti i miei cookie su entrambi i browser e ho eseguito i miei test con un solo browser aperto e un account Google. Ho ancora questo bug.

Questo è un bug molto fastidioso. Inoltre, Google Chrome lo gestisce abbastanza bene, ma Firefox è completamente fuori di testa ed esegue la richiamata tre volte, e quindi, l'utente non è in grado di accedere (ha effettuato l'accesso per 1s e viene immediatamente riscritto).

Qualcuno potrebbe aiutarmi?

UPDATE: Ecco come Google JS Api è incluso:

<script> 
// Asynchronous load 
(function() { 
    var po = document.createElement('script'); 
    po.type = 'text/javascript'; 
    po.async = true; 
    po.src = 'https://plus.google.com/js/client:plusone.js'; 
    var s = document.getElementsByTagName('script')[0]; 
    s.parentNode.insertBefore(po, s); 
})(); 
</script> 
+0

Puoi elaborare l'ultimo punto, che sembra un po 'diverso dal resto del post. Stai ottenendo lo stato logged_out subito dopo aver ottenuto il token su Firefox? – Prisoner

+0

Vorrei fornire schermate dei log della console, ma sfortunatamente il bug "extra" in Firebox si verifica in modo completamente casuale. Finora, non sono stato in grado di identificare ciò che realmente fa scattare la "modalità fuori di testa" del mio Firefox. Il più delle volte, si comporta come Google Chrome (cioè il signInCallback viene chiamato due volte, ma l'utente è ancora in grado di riconnettersi). –

+0

Ma nella "modalità fuori di testa", sono inizialmente disconnesso ('error = user_signed_out'), poi faccio clic sul mio pulsante Accedi, quindi appare il pop-up di autenticazione, quindi scompare all'istante perché sono ancora loggato sul mio account Google e non ho revocato il mio accesso, quindi il 'signInCallback' riceve un' codice' e un 'access_token' validi, ma poi il' signInCallback' è * immediatamente * chiamato di nuovo due volte con un errore 'user_signed_out'. –

risposta

0

questo non è esattamente una risposta, ma ogni volta che uso Chrome si verifica questo errore, ma non appena ho acceso per Safari è andato via . Mi rendo conto che questo potrebbe non aiutare l'OP, ma nel caso in cui qualcun altro dovesse imbattersi in questo thread, prova ad usare un browser diverso. Ha funzionato per me.

Problemi correlati