Возврат параметра в обратном вызове скрипта Google App - PullRequest
0 голосов
/ 13 июня 2018

Следующий пример кода успешно выполняет обратный вызов скрипта 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>')
}

Однако мне нужно вернуть переменную в метод "testCallback" как часть перенаправления 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);

, но не ясно, доступны ли переменные заголовка или cookie для метода обратного вызова Google:

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 обновить аргументы объекта состояния как частьперенаправление / возврат.

Я также пытался добавить переменную в URL-адрес обратного вызова Google, например, https://script.google.com/macros/d/1eC5VsM2vkJXa9slM40MTKTlfARGAGyK1myMCU3AB_-Ox_jGxQaoPM8P2?state=ADEpC8w0dL6mBVmDQHX3XcYcBP0JqQ5_etc&myVariable1=someValue1

Однако Google выдает ошибку "Недопустимое состояние"

1 Ответ

0 голосов
/ 13 июня 2018

Объект события, переданный вашей функции testCallback(e), не может ссылаться на HTTP-заголовки или файлы cookie, и добавление произвольных переменных URL-адресов в URL-адрес перенаправления также не будет работать (сервер авторизации, который выполняет перенаправление, пропустит их для обеспечения безопасности).

Единственным допустимым способом отправки переменных состояния является использование метода withArguments().Однако ваши Logger.log() вызовы не будут работать, поскольку вызовы (для функции testCallback(e)) являются асинхронными, и они не отслеживаются в редакторе.Вместо этого попробуйте включить ведение журнала StackDriver из меню «Вид» редактора сценариев приложений и заменить эти Logger.log() вызовы console.log().После этого ваши журналы должны появиться в разделе «Ведение журнала StackDriver» в консоли API Google для проекта.

...