Как правильно построить токены состояния для обратных ссылок в управляемых библиотеках?

У меня проблема со скриптом Google Appsгосударственные токены когда вызывается из управляемой библиотеки. Это означаетThe state token is invalid or has expired. Please try again. всегда принимается ошибка, если токен состояния создается из подфункции.

Вот пример кода, который будет в библиотеке (вы можете добавить с ключом проектаMP9K5nBAvEJwbLYG58qx_coq9hSqx7jwh)

var SCRIPT_ID = "1eC5VsM2vkJXa9slM40MTKTlfARGAGyK1myMCU3AB_-Ox_jGxQaoPM8P2";

// get a callback url to render in popup
function getAuthURL() {  
  var authorizeURL = getCallbackURL('testCallback');
  return authorizeURL;
}

// generate a user callback url
function getCallbackURL(callback) {
  var state = ScriptApp.newStateToken().withTimeout(3600).withMethod(callback).createToken();
  return 'https://script.google.com/macros/d/'+SCRIPT_ID+'/usercallback?state='+state;
}

// generate login popup
function showLogin(doctype){
  doctype.getUi().showDialog(
      HtmlService
          .createTemplate("<div><p><a href='<?=getAuthURL()?>' id='start-auth'><?=getAuthURL()?></a></p>" +
                          "<p><a href='<?=getAuthURLStored()?>' id='start-auth'><?=getAuthURLStored()?></a></p></div>")
          .evaluate()
          .setSandboxMode(HtmlService.SandboxMode.NATIVE)
          ); 
}

// dummy callback function
function testCallback(e){
  return HtmlService.createHtmlOutput('<b>Success. You can close this window. !</b>')
}

/*
  Rather than using dynamic state url storing the callback url and getting from property
  (you could set a script trigger to refresh this every 24 hours)
*/
function getAuthURLStored() {  
  var authorizeURL = getSetCallbackURL();
  return authorizeURL;
}

function setCallbackURL(){
  PropertiesService.getScriptProperties().setProperty('callbackURL', getCallbackURL('testCallback'))
}

function getSetCallbackURL(){
  return PropertiesService.getScriptProperties().getProperty('callbackURL')
}

который может быть вызван в Документе Google как (при условии, что идентификатор управляемой библиотеки является проверкой состояния.

function testFunction() {
  statetest.showLogin(DocumentApp);
}

когдаtestFunction При запуске диалоговое окно в документе представляет два URL-адреса, первый с динамическим URL-адресом состояния недействителен, второй с сохраненным маркером состояния работает.

Это ошибка или ожидаемое поведение?

Ответы на вопрос(2)

Ваш ответ на вопрос