我的Google Docs插件在用户同时登录到多个Google帐户的Web应用程序中运行时出现问题,然后当他们尝试使用第三方应用程序的访问令牌将保存到错误的Google帐户中。Google Apps脚本:未找到端点
我的想法是通过在状态参数中传递授权用户的电子邮件来检查当前用户的电子邮件,然后重新构建重定向URL以包含具有正确帐户电子邮件的authuser参数,然后重定向到那个终点。不过,我在创建实际可用的新重定向网址时遇到了问题。
我经常使用的OAuth重定向将我带回/exec
端点的脚本。在我的doGet()
里面,我正在检查状态参数是否等于Session.getActiveUser().getEmail()
的值。如果不是,那么我会构建一个指向我的/exec
端点的新重定向URL,除了我还会添加一个authuser参数以及一个redir参数,该参数告诉该应用程序在下次通过doGet()
时不尝试并建立新的重定向。然后,我输出一个名为userAuth的HTML页面。 userAuth页面包含一个用户点击使用包含authuser的新重定向的链接。问题是,当你点击这个链接时,你会看到一个“对不起,你请求的文件不存在”。错误信息。
我的/exec
端点发生了什么事,使得它在第二次尝试请求时不存在?有更好的方法我应该去做这件事吗?
更新:我发现我的/exec
端点没有发现只要我送从一个目前正在与谷歌不同的授权的authuser
参数值。我误解了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;
}
生成404错误消息的第二个帐户是否可以访问该Web应用程序?例如,如果您正在使用/ dev端点,则只有该脚本的编辑者才能访问该webapp。 – 2014-11-10 21:36:32