Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用需要AJAX授权的Google应用程序脚本_Javascript_Ajax_Google Apps Script_Oauth 2.0_Google Oauth - Fatal编程技术网

Javascript 调用需要AJAX授权的Google应用程序脚本

Javascript 调用需要AJAX授权的Google应用程序脚本,javascript,ajax,google-apps-script,oauth-2.0,google-oauth,Javascript,Ajax,Google Apps Script,Oauth 2.0,Google Oauth,我需要访问AJAX中的Google Apps脚本,该脚本需要用户授权才能从他的GMail帐户发送电子邮件。 出于各种原因,我不得不从谷歌应用程序脚本发送这封电子邮件 该调用是从服务器上托管的web应用程序发出的。我也在使用谷歌登录+认证。 我试图在my web app授权范围中包含gmail,但这是不够的,因为我的web app和我的Google Apps脚本不是Google的同一实体(不是相同的客户端id) 我希望整个过程如下所示: 用户通过其Google帐户在我的web应用程序上进行身份验证

我需要访问AJAX中的Google Apps脚本,该脚本需要用户授权才能从他的GMail帐户发送电子邮件。 出于各种原因,我不得不从谷歌应用程序脚本发送这封电子邮件

该调用是从服务器上托管的web应用程序发出的。我也在使用谷歌登录+认证。 我试图在my web app授权范围中包含gmail,但这是不够的,因为我的web app和我的Google Apps脚本不是Google的同一实体(不是相同的客户端id)

我希望整个过程如下所示:

  • 用户通过其Google帐户在我的web应用程序上进行身份验证
  • 他点击按钮发送电子邮件
  • 如果他从未授权我的谷歌应用程序脚本,则会显示授权弹出窗口
  • 他授予权限,他不会被重定向到Google应用程序脚本结果页面,但会停留在我的web应用程序上
  • GoogleApps脚本发送电子邮件,并将JSONP中的内容返回到我的Web应用程序
  • 有可能吗

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

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

  • 我被困于此,非常感谢任何帮助

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

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


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

    好的,谢谢您的回答。我不能像为我的Web应用配置一样配置由Google Apps脚本生成的弹出窗口吗?我注意到在HTML代码中GAS将客户端id与我的脚本相关联。但是,在开发人员控制台中,没有为我的脚本创建客户端ID。具体来说,我想将重定向uri更改为“postmessage”,以便在用户授予访问权限后弹出窗口关闭,但如果这样做,我会得到一个no_registered_原点。不,目前无法访问该控制台,它隐藏的最新答案描述了另一种方式。因此我认为我用我手动创建的客户端id授予GAS的访问权限根本没有被考虑在内,但是,当我在新选项卡中直接进入脚本页面时,提示不会要求我访问profile&gmail,只要求“离线访问”。这意味着,如果我能让用户在我的web应用程序上授予访问权限,这几乎是可行的。但是,无论我将
    访问类型
    更改为
    联机
    ,还是
    脱机
    ,结果都是一样的。你知道这件事吗?这是正常行为吗?酷,我不知道有可能进入控制台项目。不过,ajax不可能做到这一点,您需要为用户提供一个扭结,以便第一次单击并执行oauth流。阿贾克斯不能那样做