2015-04-23 9 views
16

Ich ging genau nach den Anweisungen für die Integration von Google-Anmeldung:Typeerror: gapi.auth2 undefined

https://developers.google.com/identity/sign-in/web/sign-in#specify_your_apps_client_id

-Anmeldung funktioniert, aber Abmelde gibt einen Javascript-Fehler in der Zeile:

var auth2 = gapi.auth2.getAuthInstance();

Der Fehler ist:

gapi.auth2 undefined

ich die google-Plattform li schließen wie angegeben:

<script type='text/javascript' src='https://apis.google.com/js/platform.js' async defer></script> 

Warum funktioniert das nicht?

+0

Ich habe ein ziemlich minimalistisches Beispiel für die Verwendung von Google-Laufwerk (die auch eine Authentifizierung erforderlich ist) in Javascript. Das gesamte Beispiel ist vollständig in einer einzigen HTML-Seite von 170 Zeilen enthalten: http://dannyruijters.nl/webtex/googledrive.html Vielleicht hilft Ihnen das Ihr Problem zu lösen. –

Antwort

40

Werden signIn und signOut auf derselben Seite verwendet? Div g-signin2 lädt und init gapi.auth2, so sollte es funktionieren, solange diese auf der gleichen Seite sind.

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

Voll Beispiel (Sie haben YOUR_CLIENT_ID mit Ihrem tatsächlichen 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> 
+1

Wird 'gapi.load' irgendwo dokumentiert? Es scheint nicht Teil des Referenzmaterials zu sein: https://developers.google.com/identity/sign-in/web/reference –

+0

Gleiche Gefühle hier @MicahZoltu. Meine wilde Vermutung, wenn Sie die '

' Schaltfläche auf Ihrer Seite haben (die alle Dokumentationsbeispiele), wird die API für Sie geladen, da die Schaltfläche dies verwendet, aber für Fälle, in denen wir die Schaltfläche nicht haben, müssen Sie das sagen gapi' object welche API (s) geladen werden soll, da sie alle Google Plattform APIs enthält (und es wahrscheinlich unklug findet, alle zu laden) – Theson

+0

danke für die Lösung, ich steckte lange darin fest – John