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

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

Я использую тот же идентификатор Google Cloud Project, исполняемый файл API функции скрипта приложений настроен правильно. Отправка электронной почты 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);
    //      }
        });
}

person Alejandro Jurado    schedule 20.12.2018    source источник


Ответы (1)


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

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

person Alejandro Jurado    schedule 23.12.2018