所以我花了几个月的时间创建了一个编辑器插件并对其进行了验证。它现在以“未列出”的形式发布,但是,我无法让一些关键元素发挥作用。希望有人能帮忙解决这个问题。
简而言之,我的附加组件有一个用于与 Telegram 机器人集成的 Web 应用程序部署。据推测,用户发送给机器人的任何信息都会以某种方式得到处理并反映在电子表格中。
在我决定将其制作成独立的附加组件之前,它在脚本的包含版本中运行得非常完美;但是,现在当其他用户尝试使用它时,它不会真正起作用。我认为这是因为我的 Web 应用程序是作为“我”(脚本所有者)执行的,而“我”无权访问最终用户的电子表格(理应如此)。因此,集成工作得很好,直到执行时
SpreadsheetApp.openById(sheetId)
- 然后它会出现错误:
Exception: You do not have permission to access the requested document.
对于应用程序的开发,我使用
clasp
- 一种有助于将本地 IDE 与 GAS 集成的工具。这个工具需要授权,它通过生成如下链接来请求授权:
https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fscript.deployments%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fscript.projects%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fscript.webapp.deploy%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.metadata.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.file%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fservice.management%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Flogging.read%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform&response_type=code&client_id=XXXXXXXXXXXX&redirect_uri=http%3A%2F%2Flocalhost%3A54470
通过点击此链接,我最终会进入 oAuth 屏幕,在其中选择我的帐户并授予对此应用程序的访问权限以代表我执行操作。我相信它使用来自Credentials屏幕的ID,并且我想如果我可以为我的Web应用程序生成这样的链接并将其提供给用户来执行授权,那么系统就可以工作。
现在,只需了解如何创建这样的链接、使用什么 ID 以及如何确保我的 Web 应用程序在提供的授权下启动。
也许还有其他解决方案?服务帐号?我对想法非常开放。
PS:我知道这个问题已经以这样或那样的方式得到了回答;但我无法找到一个案例来解释如何在我的设置中实现结果(这是纯 GAS、网络应用程序和连接到它的 Telegram 机器人)。作为一名初学者开发人员,我无法将这些建议应用到我的案例中。我将不胜感激任何建议!
您可以提供一个请求授权的菜单,完成后,会将当前工作表共享到您服务帐户的电子邮件。然后,您可以使用服务帐户凭据通过工作表 API 访问工作表。请特别小心,避免泄露凭证。
访问令牌每小时都会过期,但您可以使用已安装的触发器将从
ScriptApp.getOAuthToken
检索到的令牌存储到脚本属性。然后可以从匿名 Web 应用程序执行中检索此信息,因为它们共享脚本属性。但是,我相信这会带来多种攻击场景,从安全角度来看我不会推荐这样做。