Ouath2 в скрипте Google Apps - PullRequest
       6

Ouath2 в скрипте Google Apps

2 голосов
/ 29 апреля 2019

Я следовал руководству по https://github.com/gsuitedevs/apps-script-oauth2 для очень точной настройки токена Oauth2 для сервисов Google, но я до сих пор не могу заставить работать токен доступа.

Ошибка, которую я получаю, - Доступ не предоставлен или истек.(строка 454, файл «Сервис», проект «OAuth2»)

Примечание * Мой проект уже внесен в белый список для библиотеки API GMB, и я включил его в консоли консоли API.Я также получил ClientID и ClientSecret из моего проекта.

//Oauth 2 Flow Start
function getGmbService() {
  // Create a new service with the given name. The name will be used when
  // persisting the authorized token, so ensure it is unique within the
  // scope of the property store.
  return OAuth2.createService('gmb')
  // Set the endpoint URLs, which are the same for all Google services.
  .setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth')
  .setTokenUrl('https://accounts.google.com/o/oauth2/token')

  // Set the client ID and secret, from the Google Developers Console.
  .setClientId('...')
  .setClientSecret('...')

  // Set the name of the callback function in the script referenced
  // above that should be invoked to complete the OAuth flow.
  .setCallbackFunction('authCallback')

  // Set the property store where authorized tokens should be persisted.
  .setPropertyStore(PropertiesService.getUserProperties())
  .setCache(CacheService.getUserCache())

  // Set the scopes to request (space-separated for Google services).
  .setScope('https://www.googleapis.com/auth/business.manage')

  // Below are Google-specific OAuth2 parameters.

  // Sets the login hint, which will prevent the account chooser screen
  // from being shown to users logged in with multiple accounts.
  .setParam('login_hint', Session.getActiveUser().getEmail())

  // Requests offline access.
  .setParam('access_type', 'offline')

  // Forces the approval prompt every time. This is useful for testing,
  // but not desirable in a production application.
  .setParam('approval_prompt', 'force');
}

function showSidebar() {
  var gmbService = getGmbService();
  if (!gmbService.hasAccess()) {
    var authorizationUrl = gmbService.getAuthorizationUrl();
    var template = HtmlService.createTemplate(
      '<a href="<?= authorizationUrl ?>" target="_blank">Authorize</a>. ' +
      'Reopen the sidebar when the authorization is complete.');
    template.authorizationUrl = authorizationUrl;
    var page = template.evaluate();
    DocumentApp.getUi().showSidebar(page);
  } else {
    Logger.log("No Access")
  }
}

function authCallback(request) {
  var gmbService = getGmbService();
  var isAuthorized = gmbService.handleCallback(request);
  if (isAuthorized) {
    return HtmlService.createHtmlOutput('Success! You can close this tab.');
  } else {
    return HtmlService.createHtmlOutput('Denied. You can close this tab');
  }
}

//Oauth2 Flow Finish

function testRequest() {
  var gmbService = getGmbService();

  var payload = {
    "pageSize": 5
  }

  var options = {
    "headers": {
      "Authorization": 'Bearer ' + gmbService.getAccessToken()
    },
    "method": 'GET',
    "payload": payload,
    "muteHttpExceptions": true
  };


  var response = UrlFetchApp.fetch("https://mybusiness.googleapis.com/v4/accounts",options)
  Logger.log(response);

}
...