1

我的场景:我有一个以 user1 身份运行的 AppsScript 应用程序,该应用程序发布为 Web 应用程序。在其中我实现了 doGet()。我有另一个以 user2 身份运行的 Appscript 应用程序。我尝试在已发布的 URL 上执行 URLFetch 并返回一堆指示请求者需要登录的 HTML。如果我从浏览器获取与“user2”相同的 URL,则可以完美访问 doGet() 并返回我需要的内容。

您似乎无法在 Appscript 应用程序之间发出 get(或 post - 我都尝试过)HTTP 请求。NB 两个用户都在同一个域上,如上所述,当用户从浏览器启动时它可以工作。就像用户的身份没有从 App 传递到 App。

这是一个测试用例,因为我正在尝试找出将数据从一个应用程序移动到另一个应用程序的最佳方法。谷歌有返回数据的内容服务,但我想推送数据。推送最适合我正在考虑的架构,因为将有多个应用程序(10+)试图在任何时候推送到一个应用程序,因此扩展很重要。ContentService 本身适用于一种轮询方法,如果一个应用程序轮询其他 10 个应用程序,该方法将无法扩展。将获得超时等。任何提示:这样的架构值得赞赏。我的另一个选择是让 10 个应用程序直接写入附加到主应用程序的 ScriptDB。我不喜欢这个选项,因为共享 ScriptDB 的唯一方法是在项目级别,每个应用程序都可以看到 ScriptDB 中的所有内容,并且在应用程序级别不会隔离数据。

4

2 回答 2

1

并不是说您不能让一个脚本调用另一个脚本(您绝对可以),而是 UrlFetchApp 在设计上不会通过键盘传递用户的身份验证。(其原因不在此答案的范围内;只需说它们与安全相关,对许多应用程序托管平台都很常见,并且不太可能很快改变。)因此,您可以调用另一个脚本的唯一方法是如果被调用的脚本发布为可供匿名用户使用(这意味着它必须作为脚本所有者运行,正如 Henrique 所说)。

However, what you want to do is trivially supported by the libraries feature. If script A wants to notify script B of something, and have script B take an action while preserving the user authentication of script A, all you need to do is include B as a library dependency of A and add a function to B that A can call when it wants to push a notification.

于 2012-10-10T06:57:04.267 回答
0

我没有使用这个新的“以用户身份运行”选项测试这个中间应用程序脚本 doGet 调用。但是当以开发人员身份运行时,它曾经对我很好。

此外,导入主应用程序并将数据直接推送到它并不一定要暴露任何东西。这完全取决于您构建的“接口”(不以下划线结尾的公共方法)。您不需要传递 db 实例对象。主脚本可以接收要保存的反对并自行执行。

希望这可以帮助。

于 2012-10-10T03:02:49.357 回答