Javascript 如何在web界面中授权应用程序脚本?
我有一个简单的应用程序脚本,可以在驱动器中搜索名为“某物”的文件夹,如果文件夹不存在,则列出其中的文件名,然后由它创建Javascript 如何在web界面中授权应用程序脚本?,javascript,google-apps-script,web-applications,oauth-2.0,cors,Javascript,Google Apps Script,Web Applications,Oauth 2.0,Cors,我有一个简单的应用程序脚本,可以在驱动器中搜索名为“某物”的文件夹,如果文件夹不存在,则列出其中的文件名,然后由它创建 function doGet() { var folders = DriveApp.getFoldersByName('something'); if (folders.hasNext()) { var files = folders.next().getFiles(); var fileNames = []; while (files.hasNext
function doGet() {
var folders = DriveApp.getFoldersByName('something');
if (folders.hasNext()) {
var files = folders.next().getFiles();
var fileNames = [];
while (files.hasNext()) {
var file = files.next();
fileNames.push(file.getName())
};
return ContentService.createTextOutput(JSON.stringify({
'status': 'success',
'output': fileNames
}))
} else {
DriveApp.createFolder('something');
return ContentService.createTextOutput(JSON.stringify({
'status': 'success',
'output': 'folder created'
}))
}
}
我将脚本部署为一个web应用程序,以我自己的身份执行该应用程序,使用浏览器中react应用程序的获取调用对其进行测试,所有操作都按预期进行
然后我以web应用程序的形式重新发布,作为访问web应用程序的用户执行。这一次什么也没用。我在浏览器中遇到以下错误
取
“来源”已被CORS策略阻止:
对飞行前请求的响应未通过访问控制检查:否
“Access Control Allow Origin”标头出现在请求的服务器上
资源如果不透明的响应满足您的需要,请设置请求的
模式设置为“无cors”,以获取禁用cors的资源
由于没有身份验证,我预期会出现错误。我在react应用程序上设置了GoogleOAuth2,添加了脚本和驱动器作用域,在GoogleDeveloper控制台中注册了该应用程序,并对所有内容进行了设置,这样我就可以获得一个accessToken,通过对GoogleScript的fetch调用在标题中发送
但我仍然得到了与上面相同的错误
我应该如何授权应用程序脚本应用程序,以便任何人都可以运行它
我正在尝试创建一个带有google登录按钮的web应用程序,当用户登录时,它会调用我部署的appscript,并在他们的驱动器中搜索文件夹名“某物”,以便我可以显示web应用程序中的文件名
这不是cors问题,如果我以自己的身份执行web应用程序,则没有cors问题,代码也没有更改。我的问题是关于如何授权应用程序脚本?我之所以提到cors错误,是因为我展示了迄今为止我所尝试的内容。如果调用中的任何函数抛出异常,您将收到cors错误,因为您没有try…catch处理程序。当部署webapp时,Google的错误页面不包含任何CORS标题 为了防止这些掩蔽CORS错误,请使用try…catch包装您的web应用程序入口点,以便报告实际错误 即使不使用try…catch包装webapp的入口点,也很可能通过查看项目的Stackdriver日志/Stackdriver错误报告来访问底层错误 这是一个简单的示例,演示了一些事件对象验证,以确保请求来自您关心的地方&格式正确,然后调用一个函数,该函数可能会引发无效/未授权操作的异常。无论哪种情况,它都会返回一个不透明的面向用户的响应对不起!对于错误,将生成Stackdriver日志。它无法捕获因执行时间配额违反而发生的异常,因为您的脚本只是被终止 函数doGete{ 如果!e | |!验证|{ 返回失败; } 试一试{ 返回内容。。。; } 犯错误{ console.error{message:Drive walk failed:+err.message,stack:err.stack,error:err}; 返回失败; } } 功能失效{ 返回ContentService.createTextOutput对不起!; } 函数验证\u eventObj{ /**这里的代码确保这是可以使用的有效事件对象*/ //返回true; //或 //返回false; } 函数walkDriveContentfolderName{ /** *您的代码可能会在此处引发异常,但在其他情况下 *返回TextOutput或HtmlOutput */ }
1.尝试将X-frame选项设置为允许使用htmlservice或2执行所有操作。使用doPost或3。使用后端获取所以你说这只是一个cors问题,我尝试做的是有意义的,并且可以使用appscript?这不是你的错误陈述的吗?我不明白为什么不。。。但我怀疑你是否能绕过cors。@tehhowch Rebooedi不能保证任何事情,但我相信你所尝试的是完全可能的,这仍然是cors的问题,或者回答说谷歌的错误页面不包含任何cors标题。->因此,你在某处有一个错误。您必须提供错误日志查看>堆栈驱动程序日志谢谢,我会试试这个。但这是否意味着你说我的一般方法是正确的,我应该能够通过在头中传递访问令牌来验证脚本。我没有别的事要做吗?@josh在我的脑子里,是的,如果你获得了一个包含所需范围的OAuth2访问令牌,那么你可以作为该用户执行你的web应用程序。您可能无法以该用户的身份访问web应用。我建议将您的问题更新为关于解决掩蔽CORS错误的问题,然后在确定了潜在错误后,再提出一个新问题。也许你应该回顾一下我不太担心cors,我会弄明白或者问另一个问题,这个问题的标题是“如何在web界面中授权应用程序脚本?”。@josh是的,这是标题,但你的问题主体几乎完全是关于cors错误。这是我的回答
说明如何防止获取CORS错误,并访问导致CORS错误的基础错误。谢谢。我感谢你的帮助。我尽了最大努力在问题的底部明确指出这不是cors问题,我只提到cors错误,因为我展示了我迄今为止所做的尝试。我担心的是我不知道;I don’我不想花很长时间来修复cors的错误,如果我想做的根本不可能的话。您是否曾经通过传递令牌,通过web应用程序授予对应用程序脚本应用程序的访问权限?