Подтвердить что ты не робот

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());

}
4b9b3361

Ответ 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>