Автоматическое удаление файлов с Google Диска старше n дней - Доступ запрещен: DriveApp - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь удалить некоторые файлы из папки на диске Google с помощью этого скрипта он продолжает говорить, пока я запускаю этот код

«Доступ запрещен: DriveApp. (Строка 20, файл« Код ») Отклонить»

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

function DeleteOldFiles() {
  var Folders = new Array(
    '1RnA55YH_AyPzEVmkAXkaia2iuH17Kkdl'
  );
  var Files;

  Logger.clear();

  for each (var FolderID in Folders) {
    Folder = DriveApp.getFolderById(FolderID)
    Files = Folder.getFiles();

    while (Files.hasNext()) {
      var File = Files.next();

      if (new Date() - File.getLastUpdated() > 1 * 1 * 10 * 10 * 1000) {
        File.setTrashed(true); // Places the file int the Trash folder
        //Drive.Files.remove(File.getId()); // Permanently deletes the file
        Logger.log('File ' + File.getName() + ' was deleted.');
      }

«Доступ запрещен: DriveApp. (Строка 20, файл« Код ») Отклонить»

но я разрешил доступ в консоли api и через редактор скриптов

Ответы [ 2 ]

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

Если файл, который вы пытаетесь удалить, принадлежит кому-то из вашего домена, вы можете удалить его. Вы должны использовать служебную учетную запись за пользователем.

  1. Создайте учетную запись службы из Google Cloud Console.
  2. Включить Drive API из Google Cloud Console.
  3. Добавьте области действия, необходимые для сценария, из консоли администратора Google. (Используйте идентификатор учетной записи службы)
  4. Включить делегирование G Suite для всего домена
  5. Загрузите закрытый ключ учетной записи службы в формате JSON.

Служба OAuth:

  var JSON_user = {
  "private_key": "your private key",
  "client_email": "your client email"
   };

  function getOAuthService(userId) {
  return OAuth2.createService("Service Account")
  .setTokenUrl('https://accounts.google.com/o/oauth2/token')
  .setPrivateKey(JSON_user.private_key)
  .setIssuer(JSON_user.client_email)
  .setSubject(userId)
  .setPropertyStore(PropertiesService.getScriptProperties())
  .setParam('access_type', 'offline')
  .setScope('https://www.googleapis.com/auth/drive')
  .setParam('approval_prompt', 'auto');
   }

Теперь вы можете выдавать себя за такого пользователя:

var service = getOAuthService("user email to impersonate");

Надеюсь, это поможет.

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

Что вам нужно помнить, так это то, что это личные данные пользователя. Если вы хотите получить доступ к личным данным пользователя, вам нужно разрешение владельца данных для доступа к ним. Включение API в сценарии означает только то, что ваш сценарий будет использовать этот API, это не означает, что пользователь предоставил вам доступ к своим данным.

Доступ запрещен

означает, что пользователь, с которым вы прошли аутентификацию, не имеет разрешения делать то, что вы пытаетесь сделать. или ваша заявка не получила никаких разрешений.

Apps Script автоматически определяет области авторизации (например, доступ к файлам Google Sheets или Gmail) на основе сканирования кода. Закомментированный код все еще может генерировать запрос авторизации. Если сценарию требуется авторизация, вы увидите одно из диалоговых окон авторизации, показанных здесь при запуске. Подробнее здесь Авторизация

...