Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/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
Google apps script Google应用程序脚本:未找到终结点_Google Apps Script - Fatal编程技术网

Google apps script Google应用程序脚本:未找到终结点

Google apps script Google应用程序脚本:未找到终结点,google-apps-script,Google Apps Script,我的Google Docs插件作为web应用程序运行时遇到一个问题,用户同时登录到多个Google帐户,然后当他们尝试使用第三方应用程序进行授权时,他们的访问令牌被保存到错误的Google帐户 我的想法是通过在状态参数中传递授权用户的电子邮件来检查当前用户的电子邮件,然后重新构建重定向URL,将authuser参数包含在正确帐户的电子邮件中,然后重定向到该端点。但是,我在创建一个新的重定向URL时遇到了一些问题 我的常规OAuth重定向将我带回/exec端点处的脚本。在我的doGet中,我正在检

我的Google Docs插件作为web应用程序运行时遇到一个问题,用户同时登录到多个Google帐户,然后当他们尝试使用第三方应用程序进行授权时,他们的访问令牌被保存到错误的Google帐户

我的想法是通过在状态参数中传递授权用户的电子邮件来检查当前用户的电子邮件,然后重新构建重定向URL,将authuser参数包含在正确帐户的电子邮件中,然后重定向到该端点。但是,我在创建一个新的重定向URL时遇到了一些问题

我的常规OAuth重定向将我带回/exec端点处的脚本。在我的doGet中,我正在检查state参数是否等于Session.getActiveUser.getEmail中的值。如果没有,那么我将构造一个指向我的/exec端点的新重定向URL,除了我还添加了一个authuser参数和一个redir参数,该参数告诉该应用程序下次不要尝试通过doGet构建新的重定向。然后,我输出一个名为userAuth的HTML页面。userAuth页面包含一个链接,供用户使用包含authuser的新重定向单击。问题是,当你点击这个链接时,你会收到一个提示,很抱歉,你请求的文件不存在。错误消息

在我第二次尝试请求my/exec端点时,该端点发生了什么情况,使其不存在?我有没有更好的办法

更新:我发现只有当我发送的authuser参数值与Google当前授权的参数值不同时,才能找到my/exec端点。我是否误解了authuser参数的作用?我认为,由于用户已登录到两个Google帐户,authuser将指定哪个帐户正在使用该加载项

我的doGet代码如下。谢谢你的帮助

function doGet(request) {
  var HTMLToOutput;
  if (request.parameters.state != Session.getActiveUser().getEmail() && 
         !request.parameters.redir) {
    var authuser = request.parameters.state;
    var newRedir = AUTH_REDIRECT_URI;
    newRedir = newRedir + "?code="+ request.parameters.code + "&redir=true&authuser="
               + authuser;
    setPrivateCache('newRedir', newRedir);
    HTMLToOutput = HtmlService.createHtmlOutputFromFile("userAuth");
  } else if (request.parameters.code) {
    HTMLToOutput = upgradeAuthCode(request.parameters.code + "");
  } else if (request.parameters.error == 'access_denied') {
    HTMLToOutput = HtmlService.createHtmlOutputFromFile("accessDenied");
  }
  return HTMLToOutput;
}

啊,就是这样。谢谢你,埃里克!我在一个测试域上开发并运行脚本,该测试域只允许从域内访问web应用程序。我用来测试的第二个帐户来自gmail

我最初没有想到gmail帐户无法访问web应用的原因是因为我成功地点击了/exec端点,并显示了userAuth html页面。但是,当我点击返回到/exec的链接时,我看到了404

事后看来,这是显而易见的,因为我第一次点击/exec时,是用第一个可以访问web应用程序的帐户。我第二次点击/exec时,第二个帐户没有访问web应用程序的权限


一旦我将应用程序脚本移到测试域之外,并部署web应用程序以允许访问任何人,重定向就正常工作。

生成404错误消息的第二个帐户是否有权访问web应用程序?例如,如果您使用的是/dev端点,那么只有脚本的编辑器才能访问webapp。