Мое приложение использует несколько 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);
// }
});
}