2015-12-29 7 views
6

Als erstes folge ich dieser Anleitung https://developers.google.com/identity/sign-in/web/ und dieser Referenz https://developers.google.com/identity/sign-in/web/reference.Google api auth2 signOut funktioniert nicht

Aber anstatt einen Rückruf in window deklariert zu haben, habe ich gapi.signin2.render Funktion verwendet, um die Schaltfläche zu rendern und einen Handler in meinem angularen Controller anfügen.

Anmeldung funktioniert gut, das Problem ist, wenn ich versuche, durch den Aufruf von gapi.auth2.getAuthInstance().signOut() abzumelden, es tut es einfach nicht.

Ich habe festgestellt, dass sessionStorage für accounts.google.com immer noch da ist und Google mich automatisch wieder anmeldet, wenn ich die Schaltfläche erneut auf dem Anmeldebildschirm rende.

Ich habe versucht, zu sehen, was nach signOut() passiert ist komplett:

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

Ich habe auch versucht disconnect() statt signOut() nennen, wohl wissend, dass sie den Zugang zu widerrufen wird, und es tut entfernen Token aus der session, aber Benutzersitzung ist noch da. Es ist nur weg, wenn ich die Seite neu lade.

Hier ist mein kompletter Code:

$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

Ich habe die gleichen circunstances Sie haben, (A-Stelle mit codeigniter, Winkel- und Google-Login), aber ich habe kein Problem, auf den Zugang zu entfernen. Wenn Sie sagen, dass Ihre Usersitzung noch immer da ist, meinen Sie die benutzerdefinierte Sitzung Ihrer Website oder die Authentifizierungsinstanz von Google? das ist mein Code und funktioniert gut 'Funktion googleSignOut() { \t \t var auth2 = gapi.auth2.getAuthInstance(); \t \t auth2.signOut(). Dann (function() {myPostToDeleteMySiteSession();}); \t \t auth2.disconnect(); \t \t \t \t} ' – UrielUVD

Antwort

0

Es kann vorkommen, dass das AUTH2 Objekt nicht geladen ist. (was beide in der Frage aufgeführten Probleme verursachen würde).

Dieses folgende Snippet behebt dieses spezielle Problem.

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