Сбой вызова Google oAuth2 в некоторых школах, использующих Службы Google для учебных заведений - PullRequest
1 голос
/ 29 апреля 2019

Мы разрешаем аутентификацию, используя oauth и google.Для подавляющего большинства наших клиентов показанный код работает отлично.Для некоторых, однако, это не удается.Проблема не связана с сетью, так как я могу использовать учетную запись электронной почты Google, предоставляемую школой, чтобы вызвать проблему, затем переключиться на личную учетную запись и избежать возникновения проблемы.если проблема действительно возникает, она возникает для всей этой школы, что заставляет меня поверить, что это связано с настройкой в ​​их аккаунте Google, но никто, похоже, не знает проблему.HELP !!!

Проблема в функции makeAPICall, для большинства пользователей мы можем получить доступ к электронной почте после этого, но в проблемных школах электронная почта не определена.Ошибка не возвращается, однако.

  <script type="text/javascript" src="https://apis.google.com/js/api.js" "></script>
    <script type="text/javascript">
      var apiKey = 'MY API KEY';
      var discoveryDocs = ["https://people.googleapis.com/$discovery/rest?version=v1"];
      var clientId = 'MY CLIENT ID';
      var scopes = 'profile';

      function handleClientLoad() {
        // Load the API client and auth2 library
          gapi.load('client:auth2', initClient);
       }

        function initClient() {
        gapi.client.init({
            apiKey: apiKey,
            discoveryDocs: discoveryDocs,
            clientId: clientId,
            scope: scopes,
            'immediate': false
        }).then(function () {
          // Listen for sign-in state changes.
          gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);
        });
      }

        function updateSigninStatus(isSignedIn) {
            if (isSignedIn) {
                makeApiCall();
            }
      }

      function handleAuthClick() {
          var isSignedIn = gapi.auth2.getAuthInstance().isSignedIn.get();
          if (isSignedIn) {
              makeApiCall();
        }
          else {
              gapi.auth2.getAuthInstance().signIn();
        }
      }

      function makeApiCall() {
        // Load the API and make an API call.  Display the results on the screen.
    // for most users this loads the api and allows me to access the email address.  
        // for certain schools the email addresss is not returned causing lots of problems

        gapi.client.people.people.get({ 
          'resourceName': 'people/me',
          'requestMask.includeField': 'person.emailAddresses'
        }).then(function (resp) {

        //in the case of the email not being returned, the next line errors
          var email = resp.result.emailAddresses[0].value;
          $.ajax({
        //do some application specific stuff using the email address
            }   
          });
        });
      }
    </script>

    <script type="text/javascript" async defer src="https://apis.google.com/js/api.js" 
      onload="this.onload=function(){};handleClientLoad()" 
      onreadystatechange="if (this.readyState === 'complete') this.onload()">
    </script>

Ответы [ 2 ]

1 голос
/ 02 мая 2019

После работы с одним из наших клиентов мы обнаружили, что в Справочнике Служб Google для учебных заведений информация по умолчанию защищена. Округ может либо открыть это для всех клиентов, либо предоставить клиенту определенные права. После того, как это было отрегулировано, приведенный выше код работает отлично.

Спасибо

0 голосов
/ 01 мая 2019

В соответствии с API документами , вы должны запросить также область действия email в дополнение к profile. В дополнение к этому, вы можете использовать метод UserInfo API OAuth2 (вам также необходимо добавить область действия email, но это более простой API).

...