Google OAuth断开连接,签出但GoogleAuth.isSignedIn.get()= true?

时间:2019-03-19 17:11:33

标签: javascript google-oauth2 google-authentication

这是我的代码:

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-请参阅警报对话框图像:

Alert Dialog

3 个答案:

答案 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对象的状态已经更新。