6

Ich benutze Google Login Hybrid-Flow, um Benutzer zu authentifizieren, aber ich habe einen seltsamen Fehler: wenn Benutzer abgemeldet sind (authResult['error'] == 'user_signed_out'), wird die signInCallback zweimal aufgerufen! Es passiert nicht, wenn der Benutzer sich anmeldet, also glaube ich nicht, dass es mit der (eher nervigen) 'Willkommen zurück [Benutzer]' - Eingabeaufforderung verknüpft ist.Google signInCallback zweimal aufgerufen, wenn Benutzer signed_out ist

Mein Code sieht wie folgt aus:

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... 
    } 
} 

Dies ist, was ich auf der Konsole: console log http://img4.hostingpics.net/pics/968420Capture1.jpg See a larger version

Der HTML-Code verwende ich:

<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> 

Ich bin Verwenden von zwei verschiedenen Google-Konten in zwei verschiedenen Browsern. Ich dachte zuerst, dass es daran liegt (Google speichert in einem Cookie die google_account_id und den Benutzerstatus, wie G_USERSTATE_H3 : 'google_account_id#1=0&google_account_id#2=1'). Aber ich habe alle meine Cookies in beiden Browsern gelöscht und meine Tests mit nur einem geöffneten Browser und einem Google-Konto durchgeführt. Ich bekomme diesen Fehler immer noch.

Dies ist ein sehr nerviger Fehler. Plus, Google Chrome kümmert sich ziemlich gut, aber Firefox ist völlig ausgeflippt und führt den Rückruf dreimal aus, und dann kann sich der Benutzer nicht einloggen (er ist seit 1s angemeldet und wird sofort wieder abgemeldet).

Könnte mir bitte jemand helfen?

UPDATE: Dies ist, wie Google JS Api enthalten ist:

<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

Können Sie näher auf den letzten Punkt eingehen, der klingt, als sei er etwas anders als der Rest Ihres Posts. Sie erhalten sofort den Status "logged_out", nachdem Sie das Token für Firefox erhalten haben. – Prisoner

+0

Ich möchte Screenshots von Konsolenprotokollen bereitstellen, aber der 'Extra' Fehler in Firebox passiert leider völlig zufällig. Bis jetzt konnte ich nicht herausfinden, was wirklich den "ausgeflippten" Modus meines Firefox auslöst. Meistens verhält es sich wie Google Chrome (dh das signInCallback wird zweimal aufgerufen, aber der Benutzer kann sich immer noch neu anmelden). –

+0

Aber im "ausgeflippten Modus" bin ich zuerst ausgeloggt ('error = user_signed_out'), dann klicke ich auf meinen Anmelden-Button, dann erscheint das Authentifizierungs-Popup und verschwindet sofort, weil ich noch eingeloggt bin in meinem Google-Konto und habe meinen Zugriff nicht widerrufen, dann erhält der 'signInCallback' einen gültigen' code' und 'access_token', aber dann wird' signInCallback' * sofort * erneut zweimal mit einem 'user_signed_out' Fehler aufgerufen. –

Antwort

0

Dies ist nicht gerade eine Antwort, aber wenn ich Chrome dieser Fehler auftritt, aber sobald ich auf Safari geschaltet ging es weg . Mir ist klar, dass dies dem OP nicht helfen kann, aber falls jemand zufällig über diesen Thread stolpert, versuchen Sie es mit einem anderen Browser. Es hat für mich funktioniert.