Google Apps脚本中的Ouath2

时间:2019-04-29 14:07:48

标签: javascript google-apps-script google-oauth2

我已经按照https://github.com/gsuitedevs/apps-script-oauth2上的指南非常紧密地为Google服务设置了Oauth2令牌,但是我仍然无法使访问令牌正常工作。

我收到的错误是未授予访问权限或该访问权限已过期。 (第454行,文件“服务”,项目“ OAuth2”)

注意*我的项目已被列入GMB API库的白名单,并且已在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);

}

0 个答案:

没有答案