google-apps-script - 从 GAS 请求 WebApp(在 GSheets 中)
问题描述
过去几天我花了很多时间阅读有关我的主题的帖子,但我没有找到解决方案。
- A 创建了一个简单的(独立的)WebApp 来修改表格(本示例中的 appendRow)。此 WebApp 以我的身份执行,每个人都可以访问:
function doGet(e) {
Logger.log("Call WebApi ok");
//var idSheet = e.parameter.idu;
var idSheet = "XXXXXXXXXXXXXXXXXXXXXXXXXXX";
//Logger.log(idSheet);
var ss = SpreadsheetApp.openById(idSheet);
var sh = ss.getSheetByName('tab1');
sh.appendRow(["Test"]);
}
- 在 Google 表格中,我创建了(调用者)脚本。
function go() {
var url = "https://script.google.com/a/AAAAA/macros/s/XXXXXXXXXXXXXXXX/exec";
var params = {
method: "get",
headers: {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
};
UrlFetchApp.fetch(url,params);
}
调用者脚本在 manifest 中具有以下作用域:
"oauthScopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/script.external_request", "https://www.googleapis.com/auth/spreadsheets"]
-> 如果我使用与 WebApp 所有者不同的帐户执行调用者脚本,则它不起作用。我收到 403 错误。
-> 但是,如果我在 Chrome 中打开 Publish WebApp 的 URL,它可以工作!
你知道为什么它不能从表格的调用者脚本中工作吗?
谢谢!路易斯
解决方案
我测试了您的代码,调用者脚本在以 WebApp 所有者或任何其他帐户执行时运行良好。它失败的唯一情况是在隐身模式下执行时(一些谷歌应用程序脚本函数在隐身模式下表现得很奇怪)。
尽量不要以隐身模式执行它,或者因为您没有使用getOAuthToken更改您的go()函数,如下所示
function go() {
UrlFetchApp.fetch("https://script.google.com/a/AAAAA/macros/s/XXXXXXXXXXXXXXXX/exec");
}
推荐阅读
- typescript - WebStorm“eslint --fix on save”功能不起作用。但在终端 ESLint 运行良好
- c# - 使用 AzukeKeyVault 密钥签署 JWT
- c++ - 为非标准相机实现 Qt 相机插件
- python - django-background-task 执行完成后如何释放内存资源?
- java - 如何阻止一个微服务消费消息队列中的消息-RabbitMQ
- npm - SyntaxError:尝试将所有 .js 文件的扩展名更改为 .ts 时意外导入令牌
- testing - DBT中的暴露
- r - 使用 tidyverse 更广泛地旋转
- python - 从 pd.read_sql 丢失的数据
- chart.js - Javascript 中的 Json 数据可视化与 chartjs