我正在努力处理我部署的网络应用程序。当“所有拥有链接的人”都可以使用网站权限时,由于应用程序设置为“以我的身份执行”,电子表格会从我的驱动器中正确删除,并创建一个新文件。如果我限制对某些电子邮件地址的访问,该代码将不再有效。
我尝试使用传递 token
var auth = ScriptApp.getOAuthToken();
var header = {
"authorization": "Bearer " + auth
};
var params = { 'method':'post', 'headers':header, 'muteHttpExceptions':true};
var response = UrlFetchApp.fetch(fileURL, params);
Logger.log(response);
不幸的是,执行响应是
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
在我的驱动器中创建了一个包含 html 文本的 Google 文档,因此我认为可以访问,但权限发生了一些变化。谁能指出我正确的方向?
编辑:
即使我传递了 OAuth2 访问 token ,脚本似乎也需要我再次登录。 https://developers.google.com/apps-script/reference/script/script-app#getOAuthToken()
Google 网站的范围已到位,因此我不确定为什么无法使响应正常工作。它在 UrlFetchApp 处失败,但仅传递 OAuth2 token 似乎还不够。
最佳答案
我认为您可以使用 list 与“任何人”一起访问 Web 应用程序。请尝试执行以下流程。
- 使用 URL 获取方法的项目脚本编辑器。
- 查看 -> 显示 list 文件
- 请将以下 oauthScopes 添加到
appsscript.json
。-
"oauthScopes": ["https://www.googleapis.com/auth/script.external_request", "https://www.googleapis.com/auth/drive"]
-
这样, ScriptApp.getOAuthToken()
检索到的访问 token 具有上述范围。完成此设置后,请尝试再次运行您的脚本。在您的 sceipt 中,您可以使用 auth
与“任何人”一起访问 Web 应用程序。 .
如果这不起作用,请再次重新部署 Web 应用程序。因为可能无法反射(reflect)最新版本的 Web 应用程序脚本。
引用:
如果这对您没有用,我很抱歉。
关于google-apps-script - 未经授权的 401 错误,同时 'execute as me',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48812174/