1

我有一个脚本,它首先向用户呈现一个只包含一个按钮的 UI。单击该按钮后,脚本将浏览他们的文档并更改某些文件的所有权。

加载我的脚本后,用户会看到带有红色边框的标准“需要授权”页面。用户单击按钮授予我的应用所需的权限,并被带到带有按钮的页面。

但是,单击按钮后,用户会看到一个对话框,上面写着:

遇到错误:需要授权才能执行该操作。

该应用程序设置为在用户执行脚本时执行,并且脚本访问权限设置为“任何人”。

有什么想法可能是错的吗?

我的 doGet():

function doGet(e) {
  var app = UiApp.createApplication();

  var button = app.createButton('Transfer');
  app.add(button);

  var handler = app.createServerHandler('init');
  button.addClickHandler(handler);

  return app;
}

init() 方法遍历特定文件夹(由其在脚本中的 ID 静态设置),查找当前用户拥有的文件,并将所有权转移给另一个用户。

function init() {
  // Create new log as a a Drive document
  var log = DocsList.createFile("Ownership Transfer Log");

  var user = Session.getActiveUser();

  var targetEmail = "newemail@example.com";
    transferFolderOwnership('[Drive folder ID]', user.getEmail(), targetEmail, log);
}

并转移文件夹所有权:

function transferFolderOwnership(folderId, userEmail, targetEmail, log) {
  var rootFolder = DocsList.getFolderById(folderId);
  var files = rootFolder.getFiles();

  // Transfer files
  var file;
  for (var i = 0; i < files.length; i++) {
    file = DriveApp.getFileById(files[i].getId());
    if (file.getOwner() == userEmail) {
      file.transferOwnership(targetEmail);
    }
  }

  // Do the same for folders
}
4

1 回答 1

1

您正在使用的库需要只有在从脚本编辑器调用时才能授予的授权(请参阅库源代码的结尾:)function googleOAuth_()。您看到的第一个授权仅适用于脚本的“本地”部分,另一个如下所示:

在此处输入图像描述

这是一个已知问题,在最后一个问题跟踪器帖子中描述了一种可能的解决方法。我还没有尝试过,但我想这可能是一种方法......

于 2013-03-20T13:01:14.187 回答