API выполнения скрипта приложения возвращает не прошедший проверку подлинности

Мое приложение использует несколько API-интерфейсов, которые все успешно выполняются при одном и том же auth init - за исключением API-интерфейса выполнения скрипта Apps, который выдает код ошибки 401 со следующим сообщением: "В запросе отсутствуют требуемые учетные данные для проверки подлинности. Ожидается токен доступа OAuth 2, cookie для входа в систему или другие действительные учетные данные для проверки подлинности См. https://developers.google.com/identity/sign-in/web/devconsole-project. "

Я использую тот же идентификатор Google Cloud Project, исполняемый файл API функции Apps Script установлен правильно. Отправка электронной почты API и получение файла из Drive API работают отлично. Кроме этого. Я запускаю их на локальном хосте.

Я урежу код, чтобы увеличить только самые важные части, которые, как я считаю, могут быть проблемой.

<script src="https://apis.google.com/js/platform.js?onload=onLoadCallback" async defer></script>

<script>
window.onLoadCallback = function(){
gapi.load('auth2', initSigninV2);
};

function initSigninV2() {
    gapi.auth2.init({
            apiKey: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
            discoveryDocs: ["https://www.googleapis.com/discovery/v1/apis/drive/v3/rest","https://www.googleapis.com/discovery/v1/apis/gmail/v1/rest","https://script.googleapis.com/$discovery/rest?version=v1"],
            clientId: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com',
            scope: 'https://www.googleapis.com/auth/drive'+' https://www.googleapis.com/auth/gmail.send'+' https://www.googleapis.com/auth/script.scriptapp'
    }).then(function (authInstance) {
        if(!gapi.auth2.getAuthInstance().isSignedIn.get()) {
        gapi.auth2.getAuthInstance().signIn();

        }
                 // Listen for sign-in state changes.
          gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);

          // Handle the initial sign-in state.
          updateSigninStatus(gapi.auth2.getAuthInstance().isSignedIn.get());

    });
}

</script>

И эта функция не работает:

function appScript(callback, data, field, dl) {
    var scriptId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    var request = {
        'function': 'doPost',
        'parameters': {'data':JSON.stringify(data)}
    };
    var headers = getClientRequestHeaders();
    console.log(headers);

    gapi.client.request({
        'root': 'https://script.googleapis.com',
        'path': 'v1/scripts/' + scriptId + ':run',
        'method': 'POST',
        'headers': headers,
        'body': request
    }).then(function (response) {
            console.log(response);
    //      callback(response.fileid, response.id, field);
    //      if (dl) {
    //      dl(response.fileid);
    //      }
        });
}

1 ответ

Я нашел решение: код 401 возвращался, потому что у меня не было правильных областей действия, я вошел в мой Сценарий Google Apps> Файл> Свойства> Области, чтобы увидеть, какие области мне действительно нужны, оказалось, что мне не хватало одной области,

Я добавил это, и все прошло отлично.

Другие вопросы по тегам