it-swarm.com.de

HTML PHP google single sign on signout wird "Eigenschaft 'getAuthInstance' von undefined nicht lesen"

Ich habe Google Single Sign-On erstellt, indem Sie die folgenden Schritte unter https://developers.google.com/identity/sign-in/web/sign-in ausführen. 

Das Anmelden funktioniert wie ein Zauber, aber wenn ich versuche, die Abmeldung gemäß Artikel in den Link zu integrieren

ich erhalte den folgenden Javascript-Fehler in der Konsole

Uncught TypeError: Die Eigenschaft 'getAuthInstance' von Kann nicht gelesen werden

Und meine Abmeldungsfunktion sieht so aus

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

und meine Anmeldung sieht aus wie 

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

Werden signIn und signOut auf derselben Seite verwendet? Div g-signin2 wird geladen und inits gapi.auth2, es sollte also funktionieren, solange sich diese auf derselben Seite befinden.

Wenn sich signOut auf einer separaten Seite befindet, sollten Sie die Bibliothek gapi.auth2 manuell laden und starten. 

Vollständiges Beispiel (Sie müssen YOUR_CLIENT_ID durch Ihre tatsächliche client_id ersetzen):

<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

Überprüfen Sie: https://developers.google.com/identity/sign-in/web/reference#gapiauth2getauthinstance

und insbesondere dieser Teil:

gapi.auth2.getAuthInstance()

Gibt das GoogleAuth-Objekt zurück. Sie müssen das GoogleAuth-Objekt Mit gapi.auth2.init() initialisieren, bevor Sie diese Methode aufrufen.

Für mich ist das Problem, dass ich gapi.auth2.init () nicht zuerst aufgerufen habe

2
Leon Wang

Ich hatte das gleiche Problem und schien eine Lösung für mich gefunden zu haben, und ich denke, dass dies der Fall sein sollte.

sie sollten einen solchen Methodenaufruf haben, wie ich unten im Skript:

gapi.load("client", initAuth);

dies sollte wie geändert werden

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

und das sollte funktionieren (zumindest bei mir gearbeitet).

am einfachsten ist es,? onload = onLoad hinzuzufügen, damit Ihr API-Skript wird

 <script src="https://apis.google.com/js/platform.js?onload=onLoad" async defer></script> 

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