Проблема инициализации клиента Google gapi с кнопкой g-signin2 - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть функция initClient (), которая не срабатывает, когда на странице есть кнопка class = 'g-signin2'.Я предполагаю, что моя ошибка заключается в смешении двух разных методов аутентификации Google на одной странице.Но я не уверен, как правильно инициализировать gapi.client с помощью кнопки g-signin2.

Страница:

<!DOCTYPE html>
<html>
<head>
<meta name="google-signin-scope" content="profile email drive" />
<meta name="google-signin-client_id" content="[...].apps.googleusercontent.com">
<script async defer src="https://apis.google.com/js/platform.js?onload=handleClientLoad"></script>
<script type="text/javascript">
    var CLIENT_ID = '[...].apps.googleusercontent.com';
    var API_KEY = '[...]';
    var DISCOVERY_DOCS = ["https://www.googleapis.com/discovery/v1/apis/drive/v3/rest"];
    var SCOPES = 'https://www.googleapis.com/auth/drive.metadata.readonly';
    function handleClientLoad() {
        gapi.load('client:auth2', initClient);
    }
    function initClient() {
        gapi.client.init({
          apiKey: API_KEY,
          clientId: CLIENT_ID,
          discoveryDocs: DISCOVERY_DOCS,
          scope: SCOPES
        }).then(function () {
          console.log("one of those sign-in state changes");
          gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);

          updateSigninStatus(gapi.auth2.getAuthInstance().isSignedIn.get());
        }, function(error) {
          appendPre(JSON.stringify(error, null, 2));
        });
    }
    function updateSigninStatus(isSignedIn) {
        if (isSignedIn) {
            listFiles();
        }
    }
    function listFiles() {
        gapi.client.drive.files.list({
          'pageSize': 10,
          'fields': "nextPageToken, files(id, name)"
        }).then(function(response) {
            console.log(response.result.files);
        });
    }
    function onSignIn(googleUser) {
        console.log("Logged in as: " + googleUser.getBasicProfile().getEmail());
    }

</script>
</head>

<body>
    <div class="g-signin2" data-onsuccess="onSignIn" data-theme="dark"></div>
</body>

</html>

Простое удаление класса g-siginin2 изКнопка позволяет initClient выполнять и запускать listFiles (), но я полагаюсь на кнопку «g-signin2» для запуска других функций с помощью onSignIn.С этим кодом, как есть, initClient никогда не будет работать.

Как правильно это сделать?

...