2016-04-13 2 views
0

У меня есть этот javascript для извлечения таблицы html, а затем передать массивы в скрипт приложений Google в качестве параметров.403 ошибка при выполнении скрипта Google Apps из другой учетной записи google

var CLIENT_ID = 'some ID'; 
var SCRIPT_ID = 'some ID'; 
var SCOPES = ['https://www.googleapis.com/auth/drive.file']; 

    function handleAuthClick(event) { 
      gapi.auth.authorize(
       {'client_id': CLIENT_ID, 'scope': SCOPES, 'immediate': true}, 
       handleAuthResult); 
    } 

      function handleAuthResult(authResult) { 
      if (authResult) { 
       // Access token has been successfully retrieved, requests can be sent to the API 
      } else { 
       // No access token could be retrieved, force the authorization flow. 
       gapi.auth.authorize(
        {'client_id': CLIENT_ID, 'scope': SCOPES, 'immediate': false}, 
        handleAuthResult); 
      } 
      } 


    function exportGsheet() { 
     var myTableArray = []; 
     $("table#fin tr").each(function() { 
     var arrayOfThisRow = []; 
     var tableData = $(this).find('td'); 
     if (tableData.length > 0) { 
     tableData.each(function() { arrayOfThisRow.push($(this).text()); }); 
     myTableArray.push(arrayOfThisRow); 
     } 
     }); 

     var params = JSON.stringify(myTableArray); 
     var request = { 
      'function': 'setData', 
      'parameters': params, 
      'devMode': true // Optional. 
     }; 

     var op = gapi.client.request({ 
      'root': 'https://script.googleapis.com', 
      'path': 'v1/scripts/' + SCRIPT_ID + ':run', 
      'method': 'POST', 
      'body': request 
     }); 

     op.execute(function(resp){opensheet(resp)}); 
     } 

Ниже приведен сценарий приложений. Это использует API-интерфейс Drive API и исполняемый API.

var DOC_ID = 'some id'; 
var formattedDate = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd'T'HH:mm:ss'Z'"); 
var folder = DriveApp.getFolderById('some id'); 

function setData(parameters) { 
    var getFile = DriveApp.getFileById(DOC_ID); 
    var file = getFile.makeCopy(formattedDate, folder); 
    var ss = SpreadsheetApp.open(file); 
    var ssId = ss.getId(); 
    ss.getSheets()[0].getRange(5,1,50,24).clear(); 
    var e = JSON.parse(parameters); 
    var outerArray = []; 
    for(var i = 0; i < e.length; i++) { 
    outerArray.push(e[i]); 
    } 
    ss.getSheets()[0].getRange(5, 2, outerArray.length, outerArray[0].length).setValues(outerArray); 
    return {"url":ssId}; 
    Logger.log(ssId); 
} 

Все отлично работает, когда я разрешаю используя GMAIL ID, которому принадлежит скрипт приложения и проекта (мой собственный Gmail счета). Но когда я аутентификация с использованием другой учетной записи GMAIL я получаю ошибку ниже:

error: {code: 403, message: "The caller does not have permission", status: "PERMISSION_DENIED"} 
code: 403 
message: "The caller does not have permission" 
status: "PERMISSION_DENIED" 

Я намерен сделать эту общественность приложений и каждый должен иметь возможность аутентификации с помощью своего аккаунта Gmail и выполнить сценарий. Как мне это сделать? Пожалуйста помоги.

+0

файл с id docid должен быть общедоступным читать –

+0

Его уже публично. Позже я понял, что должен предоставить разрешение в Project Console Project. Перейдите к «Разрешения-разрешения для проекта« xxx »- добавьте участников, а затем добавьте домены или идентификаторы электронной почты. Добавленные идентификаторы/домены электронной почты смогут выполнять сценарий. Тем не менее, я не смог использовать домен gmail. Я поднял [вопрос] (https://code.google.com/p/google-apps-script-issues/issues/detail?id=5930&colspec=Stars%20Opened%20ID%20Type%20Status%20Summary%20Component% 20Owner) с поддержкой Google – Maddy

ответ

0

Люди, я выяснил проблему позже. Это была проблема с разрешением n Консоль разработчика. Мы должны назначить разрешение в Project Developer Project для проекта, связанного с сценарием приложений. Так выполните следующие действия:

  • Открыто ваши приложения сценария Перейти к ресурсам-Разработчики проекта консоли
  • Нажмите на название проекта появляющейся в синий под «Этот сценарий является
    в настоящее время связан с проектом:» Это будет перенаправлять вас Разработчику Консольный проект.
  • Нажмите на меню в правом верхнем углу с левой стороны и нажмите на Права доступа
  • В разделе Разрешения нажмите кнопку Добавить членов
  • В элементе введите идентификатор электронной почты или домен, который вы хотите предоставить разрешение и желаемый уровень разрешений. Нажмите «Добавить»

Все готово.

Однако я не смог добавить весь домен gmail и не смог добавить allAuthenticatedUsers. Я поднял issue с поддержкой google

Смежные вопросы