API Google Sheets выдает ошибку 401 при добавлении строк в таблицу без входа в систему - PullRequest
0 голосов
/ 24 января 2019

Цель: Отправить форму и сохранить данные в электронную таблицу Google

Документация: ссылка

Что я сделалfar:

var CLIENT_ID = 'my_client_id.apps.googleusercontent.com';
var API_KEY = 'MY_API_KEY';
var DISCOVERY_DOCS = ["https://sheets.googleapis.com/$discovery/rest?version=v4"];
var SCOPES = "https://www.googleapis.com/auth/spreadsheets";

var authorizeButton = document.getElementById('authorize_button');
  var signoutButton = document.getElementById('signout_button');
 function handleClientLoad() {
    gapi.load('client:auth2', initClient);
  }
function initClient() {
    gapi.client.init({
      apiKey: API_KEY,
      clientId: CLIENT_ID,
      discoveryDocs: DISCOVERY_DOCS,
      scope: SCOPES
    })
function updateSigninStatus(isSignedIn) {
    if (isSignedIn) {
      //authorizeButton.style.display = 'none';
      //signoutButton.style.display = 'block';
      //listMajors();
    } else {
      //authorizeButton.style.display = 'block';
      //signoutButton.style.display = 'none';
    }
  }
function appendPre(message) {
    var pre = document.getElementById('content');
    var textContent = document.createTextNode(message + '\n');
    pre.appendChild(textContent);
  }
function update_docs(data) {
    var params = {
      spreadsheetId: '1YXMlr_-I45AWM2b9QnLkuLQoI6dq6wEuVOcttOMv9hU',
      range: 'A:I',  // TODO: Update placeholder value.
      valueInputOption: 'RAW',
      insertDataOption: 'INSERT_ROWS',
    };

  var valueRangeBody = {

    "range": 'A:I', // 9 cols
    "majorDimension": 'ROWS',
    "values": [
      [
        data[0].value,//nom,
        data[1].value,//prenom,
        data[2].value,//email,
        data[3].value,//user_phone,
        data[4].value,//company_name,
        data[5].value,//user_type,
        data[6].value,//account_name,
        data[7].value,//password,
        data[8].value,//comptes_sources,
      ]
    ]

  };

  var request = gapi.client.sheets.spreadsheets.values.append(params, valueRangeBody);
  request.then(function(response) {
    console.log(response.result);
  }, function(reason) {
    console.error('error: ' + reason.result.error.message);
  });
}

Я могу успешно добавить строки в электронную таблицу, если войду в свою учетную запись Google.

Вопрос: Могу ли я добавитьстрока без входа в систему (если да, пожалуйста, предоставьте некоторые документы / код)?Потому что, если я отправляю форму из частного окна, она выдает ошибку 401.

сообщение об ошибке: error: Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential.

1 Ответ

0 голосов
/ 24 января 2019

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

Существует разница между частными и общедоступными данными.

  • Публичные данные, Поиск публично загруженных видео на YouTube
  • Личные данные, личная учетная запись gmail, учетная запись диска, учетная запись календаря.

Даже установка общего доступа к листу не поможет вам, так как при открытом доступе с использованием ключа API вам будет разрешено только читать лист, но не обновлять его.

Ответ: Нет, вы не можете добавить строку без аутентификации приложения и доступа к данным.

Предполагая, что это лист, которым вы лично владеете, вы можете настроить аутентификацию учетной записи службы и предоставить доступ учетной записи учетной записи службы, после чего вы сможете вносить изменения без необходимости входа в систему. Однако это зависит от того, как работает ваше приложение и какой язык вы используете. Я не думаю, что javascript поддерживает аутентификацию учетной записи службы.

...