在Google App Script回调中返回参数

时间:2018-06-13 10:46:12

标签: asp.net google-apps-script callback

以下示例代码成功执行了对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;错误

1 个答案:

答案 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下。