调用auth2.signOut()报错Cannot read property 'signOut' of undefined如何解决
谷歌登录登出报错解决方案
你遇到的问题分别对应不同根因:
- 最初的
Cannot read property 'signOut' of undefined报错是异步执行顺序问题:gapi.load加载auth2模块的回调是异步执行的,你在回调外部访问auth2变量时,回调还没触发,变量还没有赋值,所以是undefined。 - 后续的
ia报错是谷歌身份服务库触发的重复初始化错误,同一个客户端ID不能重复调用gapi.auth2.init方法初始化实例。 - 未主动调用的
ga方法报错是谷歌平台库内部默认会触发Google Analytics打点逻辑,你没有引入GA脚本就会触发该报错,不影响核心功能。
修复后代码
$(document).ready(function () { // 检测登出参数 if (window.location.href.includes('?signout=true')) { console.error('检测到登出参数,开始执行登出逻辑'); // 加载auth2模块 gapi.load('auth2', async function () { let authInstance; // 优先读取已存在的实例,避免重复初始化 if (gapi.auth2.getAuthInstance()) { authInstance = gapi.auth2.getAuthInstance(); } else { try { // 没有实例的情况下再初始化,等待初始化完成 authInstance = await gapi.auth2.init({ client_id: '替换为你自己的client_id' }); } catch (initErr) { console.error('谷歌身份服务初始化失败', initErr); return; } } // 执行登出逻辑 try { await authInstance.signOut(); console.error('用户登出成功'); // 登出完成后可自行添加跳转、刷新页面等后续逻辑 } catch (signOutErr) { console.error('登出执行失败', signOutErr); } }); } });
额外说明
如果要消除ga相关报错,可以在页面头部引入谷歌分析基础脚本即可,该报错不影响登出逻辑的正常运行,可以选择忽略。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

