Javascript HTML PHP谷歌单点登录注销将抛出;无法读取属性';getAuthInstance';“未定义”的定义;

Javascript HTML PHP谷歌单点登录注销将抛出;无法读取属性';getAuthInstance';“未定义”的定义;,javascript,php,html,single-sign-on,Javascript,Php,Html,Single Sign On,我已经按照中提到的步骤创建了google单点登录 登录就像一种魅力,但当我试图按照链接中的文章整合注销时 我在控制台中遇到以下javascript错误 未捕获的TypeError:无法读取的属性“getAuthInstance” 未定义 我的注销函数看起来像 <script> function signOut() { var auth2 = gapi.auth2.getAuthInstance(); auth2.signOut().then(fu

我已经按照中提到的步骤创建了google单点登录

登录就像一种魅力,但当我试图按照链接中的文章整合注销时

我在控制台中遇到以下javascript错误

未捕获的TypeError:无法读取的属性“getAuthInstance” 未定义

我的注销函数看起来像

<script>
    function signOut() {
       var auth2 = gapi.auth2.getAuthInstance();
       auth2.signOut().then(function () {
          console.log('User signed out.');
       });
    }
</script>

登录和注销是否在同一页上使用? Div g-signin2加载并初始化gapi.auth2,因此只要它们在同一页上,它就应该工作

若注销位于单独的页面上,则应手动加载并初始化gapi.auth2库

完整示例(您必须用实际的客户ID替换您的客户ID):


函数签出(){
var auth2=gapi.auth2.getAuthInstance();
auth2.signOut().then(函数(){
log('User signed out');
});
}
函数onLoad(){
load('auth2',function(){
gapi.auth2.init();
});
}
检查:

特别是这一部分:

gapi.auth2.getAuthInstance()

返回GoogleAuth对象。您必须初始化GoogleAuth 在调用此方法之前,使用
gapi.auth2.init()
创建一个对象


对我来说,问题是我没有首先调用gapi.auth2.init()我也遇到了同样的问题,似乎我找到了解决方案,我认为应该是这样

您应该像我一样在脚本的底部有这样的方法调用,如下所示:

gapi.load("client", initAuth);
这应该像这样修改

gapi.load("client:auth2", initAuth);

这应该是可行的(至少对我来说是可行的)。

最简单的方法是添加?onload=onload,这样您的api脚本就可以

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

<script>
    function signOut() {
      var auth2 = gapi.auth2.getAuthInstance();
      auth2.signOut().then(function () {
        console.log('User signed out.');
      });
    }

    function onLoad() {
      gapi.load('auth2', function() {
        gapi.auth2.init();
      });
    }
  </script>

函数签出(){
var auth2=gapi.auth2.getAuthInstance();
auth2.signOut().then(函数(){
log('User signed out');
});
}
函数onLoad(){
load('auth2',function(){
gapi.auth2.init();
});
}

非常感谢,先生,现在我可以处理了。只需将我的签出逻辑放入
gapi.auth2.init()。然后(()=>{/*signout stuff here*/})
这应该被接受为一个答案。还有一点:如果您使用angular、jquery或其他第三方框架,请确保
onLoad()
函数运行。如果不是这样,那么您的
注销将不起作用。非常感谢您,先生
gapi.load("client:auth2", initAuth);
 <script src="https://apis.google.com/js/platform.js?onload=onLoad" async defer></script> 

<script>
    function signOut() {
      var auth2 = gapi.auth2.getAuthInstance();
      auth2.signOut().then(function () {
        console.log('User signed out.');
      });
    }

    function onLoad() {
      gapi.load('auth2', function() {
        gapi.auth2.init();
      });
    }
  </script>