以下示例代码成功执行了对Google App脚本的回调:
var SCRIPT_ID = "1eC5VsM2vkJXa9slM40MTKTlfARGAGyK1myMCU3AB_-Ox_jGxQaoPM8P2";
function getURL() { return getCallbackURL('testCallback'); }
function getCallbackURL(callback) {
var state = ScriptApp.newStateToken().withTimeout(3600).withMethod(callback).createToken();
return 'https://script.google.com/macros/d/'+SCRIPT_ID+'/usercallback?state='+state;
}
function doGet(e){ return HtmlService.createTemplate(" <div><p><a href='<?=getURL()?>' id='start-auth'><?=getURL()?></a></p></div>").evaluate()); }
function testCallback(e){
Logger.log('myVariable1= ' + e.parameter.myVariable1); // this doesn't work
Logger.log('myVariable2= ' + e.parameter.myVariable2); // this doesn't work
return HtmlService.createHtmlOutput('<b>Success. You can close this window. !</b>')
}
但是我需要将一个变量返回到&#34; testCallback&#34;方法作为HttpRepsonse重定向的一部分。我已尝试设置cookie并在我的asp.net C#应用程序中设置标头变量,如下所示:
HttpCookie cookie = new HttpCookie("myVariable1");
cookie.Value = "someValue1";
cookie.Expires = DateTime.Now.AddMinutes(1);
Response.Cookies.Add(cookie);
Response.AddHeader("myVariable2", "someValue2");
Response.Redirect(applicationCallbackUri, true);
但不清楚Google的回调方法是否可以使用标头或Cookie变量:
function testCallback(e){
Logger.log('myVariable1= ' + e.parameter.myVariable1);
Logger.log('myVariable2= ' + e.parameter.myVariable2);
return HtmlService.createHtmlOutput('<b>Success. You can close this window.
!</b>')
}
我在创建新的状态令牌时也尝试使用.WithArguments方法,但我不确定我的asp.net应用程序是否可以更新状态对象的参数作为重定向/返回的一部分。
我还尝试将该变量附加到Google回调网址,例如 https://script.google.com/macros/d/1eC5VsM2vkJXa9slM40MTKTlfARGAGyK1myMCU3AB_-Ox_jGxQaoPM8P2?state=ADEpC8w0dL6mBVmDQHX3XcYcBP0JqQ5_etc&myVariable1=someValue1
然而,谷歌抛出一个无效状态&#34;错误答案 0 :(得分:0)
传递给testCallback(e)
函数的事件对象无法引用HTTP标头或cookie,并且将任意url变量附加到重定向url也不会工作(执行重定向的授权服务器将省略它们以确保安全)。
发送状态变量的唯一有效方法是使用withArguments()
方法。但是,您的Logger.log()
来电无法通过b / c调用(到testCallback(e)
函数)是异步的,并且不会在编辑器中跟踪它们。相反,尝试从Apps脚本编辑器的“查看”菜单中启用StackDriver日志记录,并将Logger.log()
次呼叫替换为console.log()
。然后,您的日志应显示在项目的Google API控制台中的StackDriver Logging下。