代码之家  ›  专栏  ›  技术社区  ›  Bryan Herbst acclux

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

  •  1
  • Bryan Herbst acclux  · 技术社区  · 13 年前

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

    和transferFolder所有权:

    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 回复  |  直到 13 年前
        1
  •  1
  •   Serge insas    13 年前

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

    enter image description here

    这是一个 known issue 并且有一个可能的解决方法,在最后一个 issue tracker posts 。我还没有尝试,但我想这可能是一条路。。。