用户授权应用程序后需要授权

时间:2013-03-20 01:37:27

标签: google-apps-script

我有一个脚本,它首先呈现一个只包含用户按钮的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);
}

并且transferFolderOwnership:

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
}

1 个答案:

答案 0 :(得分:1)

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

enter image description here

这是一个known issue,并且在最后一个issue tracker posts中描述了可能的解决方法。我还没试过,但我想这可能是一种方法......