2015-04-23 12 views
16

poszedłem dokładnie według instrukcji integracji logowania Google:TypeError: gapi.auth2 niezdefiniowany

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

prace logowania, ale wylogowania daje błąd javascript w linii:

var auth2 = gapi.auth2.getAuthInstance();

błąd jest:

gapi.auth2 undefined

I obejmują platformy li google brary zgodnie z instrukcją:

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

Dlaczego to nie działa?

+0

Mam dość minimalistyczny przykład użycia dysku Google (co wymaga również uwierzytelnianie) w javascript. Cała próbka jest w całości zawarta w jednej stronie html zawierającej 170 wierszy: http://dannyruijters.nl/webtex/googledrive.html Może to pomoże rozwiązać problem. –

Odpowiedz

40

Czy login i signOut są używane na tej samej stronie? Div g-signin2 ładuje i initi gapi.auth2, więc powinien działać tak długo, jak te na tej samej stronie.

W przypadku, gdy signOut znajduje się na oddzielnej stronie, należy ręcznie załadować bibliotekę begin i.auth2.

Pełny przykład (trzeba wymienić YOUR_CLIENT_ID rzeczywistą client_id):

<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

Czy "gapi.load" jest udokumentowane w dowolnym miejscu? Nie wydaje się być częścią materiału referencyjnego: https://developers.google.com/identity/sign-in/web/reference –

+0

Podobne poglądy tutaj: @MicahZoltu. Moje dzikie domysły, jeśli masz przycisk '

' na twojej stronie (który wszystkie przykłady dokumentacji) API zostanie załadowany dla Ciebie, ponieważ przycisk używa tego, ale dla przypadków, w których nie mamy tego przycisku musisz powiedzieć ' obiekt luki, który API (s) ładuje, ponieważ zawiera wszystkie interfejsy API platformy Google (i prawdopodobnie nie jest w stanie załadować ich wszystkich) – Theson

+0

dzięki za rozwiązanie, utknąłem w tym przez długi czas – John

Powiązane problemy