Google api auth2 signOut无效

Nob*_*oda 11 javascript google-api google-api-client angularjs

首先,我按照本指南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仍然存在,因此当我在登录屏幕上再次呈现按钮时,Google会自动重新登录.

我试过看完signOut()完成后会发生什么:

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

我也试过调用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();
Run Code Online (Sandbox Code Playgroud)

Uda*_*tne 10

我尝试如下并且它起作用了。成功auth2.disconnect()时需要调用auth2.signOut()

<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>
Run Code Online (Sandbox Code Playgroud)


小智 3

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

以下代码片段解决了该特定问题。

 if(!gapi.auth2){
    gapi.load('auth2', function() {
        gapi.auth2.init();
    });
 }
Run Code Online (Sandbox Code Playgroud)