AdminDirectory.Members.list授权错误

时间:2014-12-29 06:24:02

标签: google-apps-script google-sheets google-admin-sdk

我正在尝试使用Admin SDK并尝试在Google电子表格中列出群组成员。这是我提出的代码:

function recordGroupsMembers() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // Get all groups
  var groupPageToken, groupPage;
  do {
    groupPage = AdminDirectory.Groups.list({
      domain: 'mydomain.com',
      maxResults: 100,
      pageToken: groupPageToken
    });
    var groups = groupPage.groups;
    if (groups) {
      //Iterate groups
      for (var i in groups) {
        var group = groups[i];

        //Get members of group
        var membersPageToken, membersPage;
        do {
          membersPage = AdminDirectory.Members.list(group, {
            maxResults: 100,
            pageToken: membersPageToken
          });
          var members = membersPage.members;
          if (members) {
            //Iterate group members
            for (var j in members) {
              var member = members[j];
              Logger.log('%s member: %s', group.email, member.email);
            }
          } else {
            Logger.log('%s: no members.', group.email);
          }
          membersPageToken = membersPage.nextPageToken;  
        } while (membersPageToken);

      }
    } else {
      Logger.log('No groups found.');
    }
    groupPageToken = groupPage.nextPageToken;
  } while (groupPageToken);

  ScriptProperties.setProperty('lastUpdate', new Date());
}

对于AdminDirectory.Members.list来电,会显示以下错误:

  

未授权访问此资源/ api

要明确的是,管理员SDK目录服务已在资源>下的enabled。高级Google服务...... ,以及Google Developer Console。

此外,运行此脚本的用户可以使用API​​ Explorer成功检索预期结果。

我得到的印象是我忽略了一些非常简单或者“Apps Script handles the authorization flow automatically”语句中的错误。

1 个答案:

答案 0 :(得分:2)

基本上,这个脚本有两个问题。

未授权访问此资源/ api - >这至少有两个可能的原因:

a) You don't have sufficient Admin privileges to access this API (Basically, you're not a SuperAdmin).

b) The domain is spelled incorrectly in your live code (I hesitate to even mention this one, but mistakes do happen).

否则,这部分对我来说很好,'原样'我只能重现:

Not Authorized to access this resource/api

当这两个问题之一适用时。

一旦您解决了这个错误,您就会遇到错误的请求' for:

membersPage = AdminDirectory.Members.list(group, {
        maxResults: 100,
        pageToken: membersPageToken
      });

第21行。

这是因为行:

    var group = groups[i];

看起来喜欢它只是返回一个带有该组名称的字符串,但实际上它返回的内容如下:

{id=GROUPID, nonEditableAliases=[GROUPEMAIL, GROUPEMAIL], etag=GROUPTAG, email=GROUPEMAIL, directMembersCount=3, description=, adminCreated=true, name=GROUPNAME, kind=admin#directory#group}

这是一个简单的修复,我们只需将其替换为:

      membersPage = AdminDirectory.Members.list(group.email, {
        maxResults: 100,
        pageToken: membersPageToken
      });

它将返回我们正在寻找的结果。