【问题标题】:How to signOut from an app using gapi without needing to click on a button如何使用 gapi 从应用程序注销而无需单击按钮
【发布时间】:2024-09-09 11:25:01
【问题描述】:

我正在开发一个用于关联的网络应用程序,出于多种原因,我们想使用 Google 的 Auth2 api。

所以,我们的登录过程是这样工作的:

  • 用户点击谷歌登录按钮
  • 令牌被发送到页面以检查它是否有效,以及用户是否已经存在于数据库中
  • 如果令牌有效,则自动增加用户
  • 如果用户不存在,则从 Google 应用中注销用户

这是我的令牌验证页面的简化版本,假设用户不存在(我跳过 php 进行检查,只是插入了 php 会回显的内容):

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

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

<a href="#" id="logoutButton" onclick="signOut();">Sign out</a>     

<script src="https://apis.google.com/js/platform.js"></script>

<script>
    loadGapi();
    signOut();
</script>

当页面加载时,我收到以下错误消息:

Uncaught TypeError: Cannot read property 'getAuthInstance' of undefined
    at signOut   // On line 3

请注意,logoutButton 仅用于测试目的,单击时效果很好,但我真的不知道如何在不需要他与任何东西交互的情况下断开用户的连接。

(感谢您抽出宝贵时间阅读本文,我已经坚持了大约 3 个小时 ^^)

【问题讨论】:

  • gapi.auth2.getAuthInstance() 这个gapi可能没有被初始化。请检查可能设置超时

标签: javascript oauth-2.0 google-api-js-client


【解决方案1】:

找到答案,以防万一有人遇到同样的问题,只需在加载结束时定义一个函数作为正文中的属性执行

<body onload="functionToCall()">
</body>

【讨论】:

    最近更新 更多