这是我的代码:
function googleLogOut(){
debugAlert("googleLogOut:Begin");
GoogleAuth.disconnect();
GoogleAuth.signOut().then(function () {
debugAlert("googleLogOut:Logout Completed, current login status = " + GoogleAuth.isSignedIn.get());
userNotLoggedIn();
debugAlert("googleLogOut:Exit");
});
}
根据我的理解,断开连接会撤消当前登录用户已授予我的应用程序的授权,并且SignOut应将用户从其Google帐户中注销,基本上是撤消用户最初通过的OAuth登录为了访问我的应用程序。
但是,在GoogleAuth.signOut()之后,GoogleAuth.isSignedIn.get()的计算结果为true-请参阅警报对话框图像:
答案 0 :(得分:0)
实际上,事实证明,用户仍然登录到他的Google帐户,因此从技术上讲isSignedIn.get()返回的是正确的值。我通过打开一个新的浏览器选项卡并转到gmail来确认这一点-显然我仍然登录。不过,更重要的是,这段代码的作用是撤销了用户授予我的应用程序的所有权限-这就是本质注销功能。要对此进行测试-
GoogleAuth.currentUser.get()。hasGrantedScopes(SCOPE)==假
因此,有关是否有Google帐户登录到我的应用程序的复合测试是:
GoogleAuth.isSignedIn.get()== true && GoogleAuth.currentUser.get()。hasGrantedScopes(SCOPE)== true
这是修改后的注销功能。 (功能相同,只是修改了调试语句以显示作用域特权的撤销。)
function googleLogOut(){
debugAlert("googleLogOut:Begin");
GoogleAuth.disconnect();
GoogleAuth.signOut().then(function () {
debugAlert("googleLogOut:Logout Completed, current login status = " + GoogleAuth.isSignedIn.get());
if (GoogleAuth.isSignedIn.get()) {
debugAlert("googleLogOut:Logout Completed, current SCOPE status = " + GoogleAuth.currentUser.get().hasGrantedScopes(SCOPE));
}
userNotLoggedIn();
debugAlert("googleLogOut:Exit");
});
}
答案 1 :(得分:0)
这是一种完全不同的方法。我发现这更加可靠。
logoutWindow = window.open(“ https://accounts.google.com/SignOutOptions”,“ _blank”,“ toolbar = no,width = 600,height = 400”);
我只是打开一个窗口,进入Google的帐户管理页面。当用户退出时,他们也会从我的应用程序中退出。
锦上添花,当我在应用程序中捕获到用户注销事件时,我关闭了窗口-如果用户正在通过应用程序调用的窗口注销:
try {
logoutWindow.close();
}
catch (err) {
// nothing...
}
答案 2 :(得分:0)
使用GoogleAuth.isSignedIn.listen(listener)-调用您的侦听器时,GoogleAuth对象的状态已经更新。