我有一个脚本,它首先呈现一个只包含用户按钮的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
}
答案 0 :(得分:1)
您正在使用的库需要一个授权,只有在从脚本编辑器调用时才能授予该授权(请参阅库源代码的末尾:function googleOAuth_()
)。您看到的第一个授权仅适用于脚本的“本地”部分,另一个看起来像这样:
这是一个known issue,并且在最后一个issue tracker posts中描述了可能的解决方法。我还没试过,但我想这可能是一种方法......