web-dev-qa-db-fra.com

HTML PHP La signature unique de Google lors de la déconnexion jettera "Impossible de lire la propriété 'getAuthInstance' de non définie"

J'ai créé l'authentification unique Google en suivant les étapes décrites dans https://developers.google.com/identity/sign-in/web/sign-in

La connexion fonctionne comme un charme, mais lorsque j'essaie d'intégrer la déconnexion conformément à l'article dans le lien

j'obtiens l'erreur javascript suivante dans la console

Uncaught TypeError: Impossible de lire la propriété 'getAuthInstance' de Undefined

Et ma fonction de sortie ressemble à

<script>
    function signOut() {
       var auth2 = gapi.auth2.getAuthInstance();
       auth2.signOut().then(function () {
          console.log('User signed out.');
       });
    }
</script>

et mon signe ressemble à 

function onSignIn(googleUser) {

    var profile = googleUser.getBasicProfile();
    console.log('ID: ' + profile.getId()); 
    console.log('Name: ' + profile.getName());
    console.log('Image URL: ' + profile.getImageUrl());
    console.log('Email: ' + profile.getEmail());

}
14
manu g

Est-ce que signIn et signOut sont utilisés sur la même page? Div g-signin2 se charge et entre gapi.auth2, de sorte que cela devrait fonctionner aussi longtemps que ceux-ci se trouvent sur la même page.

Si signOut se trouve sur une page distincte, vous devez charger et lancer manuellement la bibliothèque gapi.auth2. 

Exemple complet (vous devez remplacer YOUR_CLIENT_ID par votre client_id actuel):

<html>
<head>
   <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
</head>
<body>
  <script>
    function signOut() {
      var auth2 = gapi.auth2.getAuthInstance();
      auth2.signOut().then(function () {
        console.log('User signed out.');
      });
    }

    function onLoad() {
      gapi.load('auth2', function() {
        gapi.auth2.init();
      });
    }
  </script>
  <a href="#" onclick="signOut();">Sign out</a>

  <script src="https://apis.google.com/js/platform.js?onload=onLoad" async defer></script>
</body>
</html>
24
Jarosław Gomułka

Vérifiez: https://developers.google.com/identity/sign-in/web/reference#gapiauth2getauthinstance

et en particulier cette partie:

gapi.auth2.getAuthInstance()

Renvoie l'objet GoogleAuth. Vous devez initialiser l'objet GoogleAuth Avec gapi.auth2.init() avant d'appeler cette méthode.

Pour moi, le problème est que je n’ai pas appelé gapi.auth2.init () premier

2
Leon Wang

J'ai eu le même problème et semble que j'ai trouvé la solution pour moi et je pense que cela devrait être le cas.

vous devriez avoir un appel de méthode comme ça, au bas du script, comme moi, ci-dessous:

gapi.load("client", initAuth);

cela devrait être modifié comme

gapi.load("client:auth2", initAuth);

et cela devrait fonctionner (au moins travaillé pour moi).

1