【发布时间】:2021-09-26 13:49:05
【问题描述】:
我得到错误:
未捕获的类型错误:无法读取未定义的属性“signOut”
在这条线上:auth2.signOut()
我在下面的页面上没有 google 登录按钮。
我也尝试过执行函数signOutGoogle,但这也会导致错误。
我在<head>的页面置顶:
<meta name="google-signin-scope" content="profile email">
<meta name="google-signin-client_id" content="MYAPPIDPLACEHOLDERWHICHIFILLEDOUT.apps.googleusercontent.com">
</body> 标签之前我有:
<script src="https://apis.google.com/js/platform.js?onload=onLoad" async defer></script>
JavaScript 代码:
function onLoad() {
console.error('onLoad executed.');
var auth2;
gapi.load('auth2', function () {
auth2 = gapi.auth2.init({
client_id: 'MYAPPIDPLACEHOLDERWHICHIFILLEDOUT.apps.googleusercontent.com'
});
auth2 = gapi.auth2.getAuthInstance();
});
//check if url contains ?signout=true
var url = window.location.href;
if (url.toString().indexOf('?signout=true') != -1) {
console.error('param found');
auth2.signOut().then(function () {
console.error('User signed out');
});
}
}
更新 1
由于某种原因 ga 被调用(我自己并没有明确地这样做)并且失败了,这里发生了什么?
我已经在这里检查过:
- TypeError: gapi.auth2 undefined
- gapi is not defined - Google sign in issue with gapi.auth2.init
- HTML PHP google single sign on signout will throw "Cannot read property 'getAuthInstance' of undefined"
- How to check if user is logged in or not with "Google Sign In" (OAuth 2.0)
更新 2
现在我遇到错误
未捕获的错误:ia
更新 3
我尝试从脚本调用中删除调用 noload,然后将其添加到 document.ready 以调用 signout 函数,但即使使用 @Vishal 的代码,API 仍然不可用:
<script src="https://apis.google.com/js/platform.js"></script></body>
还有:
$(document).ready(function () {
var url = window.location.href;
if (url.toString().indexOf('?signout=true') != -1) {
console.error('onLoad executed.');
var auth2;
gapi.load('auth2', function () {
auth2 = gapi.auth2.init({
client_id: 'MYAPPIDPLACEHOLDERWHICHIFILLEDOUT.apps.googleusercontent.com'
}).then(() => {
auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function () {
console.error('User signed out');
});
}).catch(err => {
console.log(err);
});
});
}
});
【问题讨论】: