2015-12-29 20 views
6

Prima di tutto, sto seguendo questa guida https://developers.google.com/identity/sign-in/web/ e questo riferimento https://developers.google.com/identity/sign-in/web/reference.Google api auth2 signOut not working

Ma invece di avere una richiamata dichiarata in window, ho usato la funzione gapi.signin2.render per rendere il pulsante e collegare un gestore ad esso nel mio controller Angolare.

La registrazione funziona correttamente, il problema è che quando provo a disconnettermi chiamando lo gapi.auth2.getAuthInstance().signOut(), semplicemente non lo fa.

Ho notato che sessionStorage per accounts.google.com è ancora lì, e per questo motivo Google mi ricollega automaticamente quando rendo il pulsante di nuovo nella schermata di accesso.

ho cercato di vedere cosa succede dopo signOut() è completa:

gapi.auth2.getAuthInstance().signOut().then(function() { 
    console.log(gapi.auth2.getAuthInstance().isSignedIn.get()); 
    // prints 'true' 
}); 

Ho anche provato a chiamare disconnect() invece di signOut(), sapendo che sarà revocare l'accesso, e lo fa rimuovere token dal sessionStorage, ma sessione utente è ancora qui. È sparito solo quando ricarico la pagina.

Ecco il mio codice completo:

$scope.logout = function() { 
    //... 
    gapi.auth2.getAuthInstance().signOut().then(function() { 
     console.log(gapi.auth2.getAuthInstance().isSignedIn); 
    }); 
}; 

$scope.processAuth = function(authResult) { 
    console.log("success"); 
    if(authResult.getAuthResponse().id_token) { 
    // backend calls 
    } 
}; 

$scope.renderSignInButton = function() { 
    console.log(gapi.auth2); 
    gapi.signin2.render('signInButton', 
    { 
     'onsuccess': $scope.processAuth, // Function handling the callback. 
     'onfailure': $scope.signinFailed, // Function handling the callback. 
     'clientid': 'asdasdasd.apps.googleusercontent.com', 
     'scope': 'https://www.googleapis.com/auth/userinfo.email', 
     'cookiepolicy': 'single_host_origin' 
    } 
); 
}; 

$scope.renderSignInButton(); 
+0

Ho le stesse circostanze che si hanno, (un sito con codeign, accesso angolare e Google) ma non ho problemi a rimuovere l'accesso. quando dici che la tua sessione utente è ancora lì, intendi la sessione personalizzata del tuo sito o l'istanza auth di google? questo è il mio codice e funziona perfettamente 'function googleSignOut() { \t \t var auth2 = gapi.auth2.getAuthInstance(); \t \t auth2.signOut(). Then (function() {myPostToDeleteMySiteSession();}); \t \t auth2.disconnect(); \t \t \t \t} ' – UrielUVD

risposta

0

Può succedere che l'oggetto auth2 non è stato caricato. (che causerebbe entrambi i problemi presentati nella domanda).

Questo snippet seguente risolve questo particolare problema.

if(!gapi.auth2){ 
    gapi.load('auth2', function() { 
     gapi.auth2.init(); 
    }); 
}