Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Google Sheets API在未登录的情况下将行附加到电子表格时出错_Javascript_Google Api_Google Oauth_Google Sheets Api_Google Api Js Client - Fatal编程技术网

Javascript Google Sheets API在未登录的情况下将行附加到电子表格时出错

Javascript Google Sheets API在未登录的情况下将行附加到电子表格时出错,javascript,google-api,google-oauth,google-sheets-api,google-api-js-client,Javascript,Google Api,Google Oauth,Google Sheets Api,Google Api Js Client,目标:提交表单并将数据存储到谷歌电子表格 文件: 到目前为止我所做的: 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/aut

目标:提交表单并将数据存储到谷歌电子表格

文件:

到目前为止我所做的:

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错误


错误消息:
错误:请求缺少所需的身份验证凭据。需要OAuth 2访问令牌、登录cookie或其他有效的身份验证凭据。

我认为在开始处理此问题之前,您需要了解一些事情

私有数据和公共数据之间存在差异

  • 公共数据,搜索公开上传的youtube视频
  • 私人数据,我的个人gmail帐户,驱动器帐户,日历帐户
即使将工作表设置为public也不会对您有所帮助,因为使用api密钥将工作表设置为public时,您只能阅读工作表,而不能更新工作表

答:不,在应用程序未经过身份验证且没有数据访问权限的情况下,不能追加行


假设这是您个人拥有的工作表,您可以设置一个服务帐户进行身份验证,并授予服务帐户对该工作表的访问权限,这样您就可以在不登录的情况下为您进行更改。然而,这取决于应用程序的工作方式和使用的语言。我认为javascript不支持服务帐户身份验证。

在脚本中,您似乎试图使用API密钥追加行。不幸的是,API键不能用于向电子表格追加行,因为API键不能用于POST和PUT方法。如错误消息所示,请使用从OAuth2或服务帐户检索的访问令牌。如果这对你的情况不是有用的信息,我道歉。谢谢你的建议。是,javascript不支持服务帐户身份验证。解决了从javascript转换为php的问题。