Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在web界面中授权应用程序脚本?_Javascript_Google Apps Script_Web Applications_Oauth 2.0_Cors - Fatal编程技术网

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应用程序授予对应用程序脚本应用程序的访问权限?