Google api auth2 signOut not working



首先,我遵循本指南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()来注销时,它根本做不到

我注意到accounts.google.com的sessionStorage仍然存在,因此,当我再次在登录屏幕上显示按钮时,谷歌会自动让我重新登录。

我试着看看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();

我按照以下方法进行了尝试,结果成功了。当auth2.signOut()成功时,需要调用auth2.disconnect()

<script type="text/javascript">
    function signOut() {
        var auth2 = gapi.auth2.getAuthInstance();
        auth2.signOut().then(function () {
            auth2.disconnect();
        });
    }
    function onLoad() {
        gapi.load('auth2', function() {
            gapi.auth2.init();
        });
    }
</script>

<script src="https://apis.google.com/js/platform.js?onload=onLoad" async defer></script>

可能会发生未加载auth2对象的情况。(这将导致问题中出现的两个问题)。

下面的代码段解决了这个特殊的问题。

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

对我来说,问题只是在chrome中,因为只有一个配置文件模式。配置文件模式意味着你只连接到一个帐户,为了查看帐户列表,你需要连接到多个帐户,但当配置文件模式打开时,你只连接了一个帐户。因此没有列表可显示-只有一个帐户。

当你连接到list2谷歌帐户时,在firefox上做一个测试,你会看到chrome中的概要文件模式的列表或存在(但我不知道如何做到这一点,我暂时在chrome中以概要文件模式堆叠)

相关内容

  • 没有找到相关文章

最新更新