3

我已经阅读了 Admin ADK Directory API 文档中的所有相关页面以及有关 stackoverflow 的几个问题,但我仍然卡住了。

我是我的 Google Apps 域的超级管理员,我希望我的域中的用户能够创建自己的 Google 网上论坛。我制作了一个 Google 表单,用户在其中指定了组的名称和电子邮件。然后 Google Form Responses 表有一个“On form submit”触发器,它调用我的代码来创建组。

createGroupTest()当我从脚本编辑器运行时,此代码有效。它会立即在我的 Google Apps 域中创建该组。

当“On form submit”触发器运行该函数时,此代码不起作用onFormSubmit(e)。我收到了这catch(e)句话的电子邮件Exception: Failed to authenticate for service: Groups

有谁知道是什么导致 oauth 身份验证在脚本编辑器中起作用,但在被 onFormSubmit 函数调用时却不知道?

function onFormSubmitTest() {
 
  var t = new Date();
  t = t.getTime();
  
  onFormSubmit([t, "AAA Test Group " + t], ["aaa.testgroup." + t + "@mydomain.com"], ["me@mydomain.com"]);
  
}

var consumerKey = "mydomain.com";
var consumerSecret = "xxxxxxxxxxxxxxxxxxxxxxxx";
var domainName = "mydomain.com";

function onFormSubmit(e) {
  
  var timestamp  = e.values[0];
  var groupName  = e.values[1];
  var groupEmail = e.values[2];
  var owner      = e.values[3];
  
  owner = owner.split("@")[0];
  
  var description = 'test';
  
  var requestBody = {email: groupEmail, name: groupName, description: description};
             
  var scope = "https://www.googleapis.com/auth/admin.directory.group";
  
  var fetchArgs                = googleOAuth_("Groups", scope);
  fetchArgs.method             = "POST";
  fetchArgs.contentType        = "application/json";
  fetchArgs.payload            = JSON.stringify(requestBody);
  fetchArgs.muteHttpExceptions = true;
   
  var url = 'https://www.googleapis.com/admin/directory/v1/groups?key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
  
  UrlFetchApp.fetch(url, fetchArgs);

}
 

function googleOAuth_(name,scope) {
  var oAuthConfig = UrlFetchApp.addOAuthService(name)
  oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
  oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
  oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
  oAuthConfig.setConsumerKey(consumerKey);
  oAuthConfig.setConsumerSecret(consumerSecret);
  return {oAuthServiceName:name, oAuthUseToken:'always'};
}
4

1 回答 1

4

我想通了:我在代码中犯了一个错误,我没有在 groupEmail 字符串之后包含域扩展名(因为 Google 表单只要求用户填写没有域扩展名的组电子邮件名称)。

我想我应该从 stackoverflow 中删除这个问题,但我会把它留在这里记录我的工作 oauth 身份验证代码,因为:

  1. 当我弄清楚时,这样的事情可能会对我有所帮助。

  2. 这里没有太多与 Google Apps Admin SDK Directory API 相关的帖子。

  3. Google 不支持此类与开发相关的问题,他们只是将用户引导到这里。
于 2014-06-30T12:27:40.907 回答