Google signInCallback est appelé deux fois lorsque l'utilisateur est signé.

J'utilise le flux hybride Google Login pour authentifier les utilisateurs mais j'ai un bogue étrange: lorsque les utilisateurs sont déconnectés ( authResult['error'] == 'user_signed_out' ), le signInCallback s'appelle deux fois! Cela n'arrive pas lorsque l'utilisateur s'inscrit, alors je ne pense pas qu'il soit lié à l'invite (plutôt ennuyeuse) "Bienvenue Back [utilisateur]".

Mon code ressemble à ceci:

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

C'est ce que je reçois sur la console: console log http://img4.hostingpics.net/pics/968420Capture1.jpg Voir une version plus grande

Le code HTML que j'utilise:

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

J'utilise deux comptes Google différents sur deux navigateurs différents. J'ai initialement pensé que cela était dû à cela (Google stocke dans un cookie le google_account_id et l'état utilisateur, comme G_USERSTATE_H3 : 'google_account_id#1=0&google_account_id#2=1' ). Mais j'ai effacé tous mes cookies sur les deux navigateurs, et j'ai exécuté mes tests avec un seul navigateur ouvert et un compte Google. Je reçois toujours ce bug.

C'est un bug très ennuyant. De plus, Google Chrome le gère assez bien, mais Firefox est totalement effrayé et exécute le rappel trois fois, puis l'utilisateur ne peut pas se connecter (il est connecté pour 1s et est instantanément relancé).

Quelqu'un pourrait-il m'aider?

MISE À JOUR: Voici comment Google JS Api est inclus:

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

Ce n'est pas exactement une réponse, mais chaque fois que j'utilise Chrome, cette erreur se produit, mais dès que je suis passé à Safari, elle est parti. Je me rends compte que cela peut ne pas aider l'OP, mais au cas où quelqu'un d'autre trébucherait sur ce fil, essayez d'utiliser un navigateur différent. Cela a fonctionné pour moi.