2015-06-19 7 views
12

Ho creato google Single Sign-On seguendo i passi di cui https://developers.google.com/identity/sign-in/web/sign-inHTML PHP google single sign on signout getterà "Impossibile leggere proprietà 'getAuthInstance' di non definito"

Il segno in opere come un fascino, ma quando ho cercare di integrare segno fuori come per l'articolo del collegamento

ottengo il seguente errore javascript in consolle

Uncaught TypeError: Cannot read property 'getAuthInstance' of undefined

E la mia funzione signout sembra che

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

e il mio segno nel look come

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()); 

} 

risposta

18

Sono signin e SignOut utilizzato sulla stessa pagina? Div g-signin2 carica ed entra in gapi.auth2 quindi dovrebbe funzionare fintanto che sono sulla stessa pagina.

Nel caso in cui signOut si trova in una pagina separata, è necessario caricare manualmente e avviare la libreria gapi.auth2.

completa esempio (si deve sostituire YOUR_CLIENT_ID con il vostro client_id reale):

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

Grazie molte signore, ora potrei gestirlo. Basta inserire la mia logica di signout in 'gapi.auth2.init(). Then (() => {/ * signout stuff here * /})' – Eric

+0

Questo dovrebbe essere accettato come risposta. Un altro: se stai usando angular, jquery o un altro framework di terze parti, assicurati che la funzione 'onLoad()' sia in esecuzione. Se non lo è, il tuo "signOut" non funzionerà – DennyHiu

+0

Grazie mille a te Sir –

1

Ho avuto lo stesso problema e sembra che ho trovato una soluzione per me e penso che dovrebbe essere così.

si dovrebbe avere chiamata al metodo del genere, alla fine dello script, come me, di seguito:

gapi.load("client", initAuth); 

questo dovrebbe essere modificato come

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

e questo dovrebbe funzionare (almeno ha funzionato per me).