Как я могу отозвать все назначенные токены и выполнить выход из моей надстройки Gmail, подключившись к службе, отличной от Google

Я разрабатываю надстройку Gmail, в которой в качестве логина используется авторизация службы, отличной от Google. После успешного входа в систему пользователь получает токен JWT, который сохраняется в «PropertiesService.userProperties».

Теперь я хочу добавить в дополнение возможность выхода из системы, которая снова будет вызывать внешний (не Google) API для выхода. Я хочу, чтобы все сеансы и токены авторизованного пользователя были уничтожены, и пользователь должен быть перенесен на карту авторизации, а затем ему / ей необходимо выполнить авторизацию еще раз.

Я уже пытался уничтожить все «PropertiesService.userProperties», но это не сработало. Также проверил «Сессию классов» скрипта Google Apps, что тоже не помогло.

Схема выглядит примерно так:

Шаг 1: Запуск contextualTrigger, который пытается загрузить следующую функцию -

function buildAddOn(e) {
  var accessToken = e.messageMetadata.accessToken; 
  GmailApp.setCurrentMessageAccessToken(accessToken);

  checkAuth();

  var card = CardService.newCardBuilder()
    .setHeader(CardService.newCardHeader().setTitle('Addon Demo')) 
    .addSection(CardService.newCardSection()
      .addWidget(CardService.newTextParagraph().setText('Hello World')))
    .build();

  return [card];
}

Шаг 2: В приведенной выше функции он вызывает функцию checkAuth (), которая проверяет авторизацию пользователя и, если пользователь не авторизован, переводит пользователя на карту авторизации. Код для checkAuth () выглядит примерно так: -

function checkAuth() {
  var service = getService()
  if (service.hasAccess()) return

  CardService.newAuthorizationException()
    .setAuthorizationUrl(service.getAuthorizationUrl())
    .setResourceDisplayName("Display name to show to the user")
    .setCustomUiCallback('create3PAuthorizationUi')
    .throwException()
}

person Mukunda M Mhasalkar    schedule 05.09.2019    source источник
comment
have already tried to destroy all the 'PropertiesService.userProperties' but it didn't work. Почему?   -  person TheMaster    schedule 05.09.2019
comment
Просто чтобы попробовать, можем ли мы завершить сеанс пользователя и отозвать авторизацию, сделав это.   -  person Mukunda M Mhasalkar    schedule 05.09.2019
comment
Я имел в виду, почему это не сработало? Или почему вы думаете, что это не сработало?   -  person TheMaster    schedule 05.09.2019
comment
Поскольку мое дополнение затем не запрашивает авторизацию снова, оно не принимает меня за авторизацию, как в идеале, оно должно запрашивать авторизацию, если токен уничтожен ...   -  person Mukunda M Mhasalkar    schedule 05.09.2019
comment
Ваш рабочий процесс похож на этот? PropertiesService.getUserProperties().deleteProperty('Credentials'); if(!PropertiesService.getUserProperties().getProperty('Credentials')){ //call a function to end the session and ask the user to log in again }   -  person ziganotschka    schedule 05.09.2019
comment
Измените свой вопрос, чтобы добавить код и пояснения. Комментарии будут удалены. См. минимальный воспроизводимый пример и Как спросить   -  person TheMaster    schedule 05.09.2019
comment
Спасибо, @TheMaster, я удалил код из комментария и добавил его в вопрос .. Пожалуйста, просмотрите   -  person Mukunda M Mhasalkar    schedule 06.09.2019
comment
Попробовать service.reset()?   -  person TheMaster    schedule 06.09.2019
comment
Большой. Добавил ответ. Подумайте о том, чтобы принять это.   -  person TheMaster    schedule 19.09.2019


Ответы (1)


Вы можете отозвать авторизацию, используя

service.reset();

Использованная литература:

person TheMaster    schedule 19.09.2019