【问题标题】:Call a Google Apps Script that requires authorization in AJAX在 AJAX 中调用需要授权的 Google Apps 脚本
【发布时间】:2014-08-23 02:33:36
【问题描述】:

我需要访问 AJAX 中的 Google Apps 脚本,该脚本需要用户授权才能从他的 GMail 帐户发送电子邮件。 由于各种原因,我必须从 Google Apps 脚本发送该电子邮件。

调用是从我的服务器上托管的 Web 应用程序发出的。我也在使用 Google Signin+ 身份验证。 我尝试将 gmail 包含在我的网络应用授权范围中,但这还不够,因为我的网络应用和我的 Google Apps 脚本对于 Google 来说不是同一个实体(不同的 client_id)。

我希望整个过程如下:

  1. 用户通过他的 Google 帐户在我的网络应用上进行身份验证
  2. 他点击按钮发送电子邮件
  3. 如果他从未授权我的 Google Apps 脚本,则会显示授权弹出窗口
  4. 他授予权限,他没有重定向到 Google Apps 脚本结果页面,但留在我的网络应用程序上
  5. Google Apps 脚本发送电子邮件,并将 JSONP 格式的内容返回到我的 Web 应用程序。

有可能吗?

我已经想到了几种解决方案,但我不知道如何使它们起作用:

  1. 有没有办法将 Google Apps 脚本的 client_id 设置为 和我的网络应用一样吗?
  2. 或者有没有办法创建(和自定义)当我尝试访问我未授予访问权限的 Google Apps 脚本时自动生成的按钮,并在我的网络应用程序上显示该按钮?

我对此感到困惑,非常感谢任何帮助!

【问题讨论】:

    标签: javascript ajax google-apps-script oauth-2.0 google-oauth


    【解决方案1】:

    您的选择都不可行。您不能以任何方式绕过该授权屏幕。
    使用相同的客户端 ID 或范围对您没有帮助,最多只会授权 您的帐户而不是用户帐户。每个用户都是一个独立的 oauth 流,其自己的令牌由应用程序脚本保存。
    然而
    如果您必须这样做,现在可以采用不同的方式进行操作,因为:
    1) 应用程序脚本现在支持(自 2014 年 2 月起)实施您自己的 oauth2 流程。
    请参阅 StateTokenBuilder/ScriptApp.getOAuthToken()/ScriptApp.newStateToken()

    2) Google 现在提供 oauth2 gmail api(几天前在 google I/O 2014 上发布)

    通过这两个,您可以编写自己的代码来使用自己的控制台项目等发送电子邮件。

    【讨论】:

    • 好的,谢谢您的回答。我不能像我的 Web 应用程序那样配置由 Google Apps 脚本生成的弹出窗口吗?我在 HTML 代码中注意到 GAS 将 client_id 与我的脚本相关联。但是,在 Developers Console 中,没有为我的脚本创建客户端 ID。具体来说,我想将 redirect_uri 更改为“postmessage”,以便在用户授予访问权限后关闭弹出窗口,但如果我这样做,我会得到一个 no_registered_origin。
    • 不,目前无法访问该控制台,它是隐藏的
    • 更新了答案以描述另一种方法。
    • 所以我认为我使用手动创建的 client_id 授予 GAS 的访问权限根本没有考虑到但是,当我直接在新选项卡中进入脚本页面时,提示不会询问我的个人资料和 gmail 访问权限,仅用于“离线访问”。这意味着如果我能让用户在我的网络应用程序上授予此访问权限,它几乎可以工作。但是,不管我把access_type改成online,还是offline,结果都是一样的。你知道吗?这是正常行为吗?
    • 酷,我不知道可以进入控制台项目。尽管如此,ajax 是不可能做到这一点的,您需要为用户提供一个扭结点,然后第一次执行 oauth 流程。阿贾克斯做不到
    猜你喜欢
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    相关资源
    最近更新 更多