HTML-указатель Google для единого входа в Google бросает "Невозможно прочитать свойство getAuthInstance" из undefined "
Я создал один единственный вход Google, выполнив следующие шаги, указанные в
https://developers.google.com/identity/sign-in/web/sign-in
Знак работает как шарм, но когда я пытаюсь интегрировать вывеску в соответствии со статьей в ссылке
Я получаю следующую ошибку javascript в консоли
Uncaught TypeError: невозможно прочитать свойство getAuthInstance undefined
И моя функция signout выглядит как
<script>
function signOut() {
var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function () {
console.log('User signed out.');
});
}
</script>
и мой знак выглядит как
function onSignIn(googleUser) {
var profile = googleUser.getBasicProfile();
console.log('ID: ' + profile.getId());
console.log('Name: ' + profile.getName());
console.log('Image URL: ' + profile.getImageUrl());
console.log('Email: ' + profile.getEmail());
}
Ответы
Ответ 1
Используются ли signIn и signOut на одной странице?
Div g-signin2 загружает и inits gapi.auth2, поэтому он должен работать до тех пор, пока они находятся на одной странице.
В случае, если signOut находится на отдельной странице, вы должны вручную загрузить и запустить библиотеку gapi.auth2.
Полный пример (вы должны заменить YOUR_CLIENT_ID своим фактическим client_id):
<html>
<head>
<meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
</head>
<body>
<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>
<a href="#" onclick="signOut();">Sign out</a>
<script src="https://apis.google.com/js/platform.js?onload=onLoad" async defer></script>
</body>
</html>
Ответ 2
Отметьте: https://developers.google.com/identity/sign-in/web/reference#gapiauth2getauthinstance
и, в частности, эта часть:
gapi.auth2.getAuthInstance()
Возвращает объект GoogleAuth. Вы должны инициализировать GoogleAuth объект с gapi.auth2.init()
перед вызовом этого метода.
Для меня проблема в том, что я не называл gapi.auth2.init() первым
Ответ 3
У меня была такая же проблема, и, похоже, я нашел решение для меня, и я думаю, что это должно быть так.
у вас должен быть такой метод, который находится внизу script, как и я, ниже:
gapi.load("client", initAuth);
это должно быть изменено как
gapi.load("client:auth2", initAuth);
и это должно работать (по крайней мере, работало для меня).
Ответ 4
проще всего добавить? 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>