【发布时间】:2015-12-29 16:59:06
【问题描述】:
首先,我正在关注本指南https://developers.google.com/identity/sign-in/web/ 和此参考https://developers.google.com/identity/sign-in/web/reference。
但是我没有在window 中声明回调,而是使用gapi.signin2.render 函数来呈现按钮并在我的Angular 控制器中附加一个处理程序。
登录工作正常,问题是,当我尝试通过调用gapi.auth2.getAuthInstance().signOut() 注销时,它就是不这样做。
我注意到 account.google.com 的 sessionStorage 仍然存在,因此当我在登录屏幕上再次呈现该按钮时,Google 会自动让我重新登录。
我试着看看signOut() 完成后会发生什么:
gapi.auth2.getAuthInstance().signOut().then(function() {
console.log(gapi.auth2.getAuthInstance().isSignedIn.get());
// prints 'true'
});
我还尝试调用disconnect() 而不是signOut(),知道它会撤消访问权限,并且确实会从 sessionStorage 中删除令牌,但用户会话仍然存在。只有在我重新加载页面后它才会消失。
这是我的完整代码:
$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();
【问题讨论】:
-
我有和你一样的情况,(一个有 codeigniter、Angular 和谷歌登录的网站)但我在删除访问权限时没有问题。当您说您的用户会话仍然存在时,您是指您网站的自定义会话还是谷歌的身份验证实例?这是我的代码,工作正常
function googleSignOut() { var auth2 = gapi.auth2.getAuthInstance(); auth2.signOut().then(function () { myPostToDeleteMySiteSession() ;}); auth2.disconnect(); }
标签: javascript angularjs google-api google-api-client