【发布时间】:2020-10-12 12:09:41
【问题描述】:
我部署了一个 Google Apps Script Web App,它使用服务帐户访问 Google Directory。我将它部署为每个人都可以访问该应用程序,并且该应用程序在执行它的用户下运行。
我想通过从属于 Google 表单一部分的另一个应用脚本调用 POST 触发器来触发这个网络应用。像这样的:
function onPost(){
var data = {
'name': 'Bob Smith',
'age': 35,
'pets': ['fido', 'fluffy']
};
var options = {
'method' : 'post',
'contentType': 'application/json',.
'payload' : JSON.stringify(data)
};
var resp = UrlFetchApp.fetch('https://script.google.com/a/my.domain.com/m.../exec', options);
}
但是,我回来了:
异常:https://script.google.com 的请求失败,返回代码 401。
当我尝试使用带有一些查询参数的 GET 触发器时,返回的响应看起来像一个 google 登录页面。
如何从同一个域中的另一个应用脚本触发我的网络应用?
使用令牌更新代码:
function onPost(){
var token = ScriptApp.getOAuthToken();
var data = {
'name': 'Bob Smith',
'age': 35,
'pets': ['fido', 'fluffy']
};
var options = {
'headers':'Bearer '+token,
'method' : 'post',
'contentType': 'application/json',.
'payload' : JSON.stringify(data)
};
var resp = UrlFetchApp.fetch('https://script.google.com/a/my.domain.com/m.../exec', options);
}
【问题讨论】:
-
Doman 在这里无关紧要 - 因为
401是一个“未经授权的”错误,所以您必须授权请求。只有当您部署为“我”和“任何人,甚至匿名”时,您才会获得公共 API。但是,如果您希望脚本在用户权限下运行,则需要对其进行授权。您可以使用getOAuthToken()获取不记名令牌,顺便说一句。这意味着您的用户必须授予您的第一个应用程序权限才能代表他们执行人员(必须足以在 Web 应用程序中运行服务)
标签: google-apps-script web-applications triggers urlfetch