我正在关注 Google's guide 以注销用户。

考虑到刷新页面后 gapi.auth2 将是未定义的,我正在做:

if (gapi.auth2) {
    var auth2 = gapi.auth2.getAuthInstance();
    auth2.signOut();
} else {
    gapi.load('auth2', function () {
        gapi.auth2.init({
            client_id: 'myAppID',
            cookiepolicy: 'single_host_origin'
        }).signOut();
    });
}

但是我在 else 块中得到了 uncaught exception: This method can only be invoked after the token manager is started

我还尝试将 auth 实例存储在本地存储中,但这样做会导致在对其进行字符串化时出现一些循环对象值错误。

一种可能的解决方案是做一个
document.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=myUrl";

但是,除了将用户从我的应用程序中注销之外,这不仅会影响用户登录的所有 Google 服务,而且还会进行不需要的重定向。

有不同的方法吗?

最佳答案

有一种更简单的方法,您只需要调用.then,然后调用gapi.auth2.init

gapi.load('auth2', function () {
   var auth2 = gapi.auth2.init({
       client_id: 'myAppID',
       cookiepolicy: 'single_host_origin'
   });
   auth2.then(function(){
        // this get called right after token manager is started
        auth2.signOut();
   });
});

10-08 05:30