API выполнения скрипта приложения возвращает не прошедший проверку подлинности - PullRequest
0 голосов
/ 21 декабря 2018

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

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

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

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

0 голосов
/ 23 декабря 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...