1

我正在试用Admin SDK并尝试在Google Spreadsheet中列出组成员。下面的代码我想出了:AdminDirectory.Members.list授权错误

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

要清楚,Admin SDK目录服务已被enabled下的资源>高级Google服务...以及在Google Developer Console中。

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

我得到的印象我忽略了一些东西很简单,或者在“Apps Script handles the authorization flow automatically”这个语句中有个错误。

回答

1

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

无权访问该资源/ 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 

当这两个问题之一适用。

一旦你解决这个错误,你会打一个 '错误的请求':

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 
     }); 

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

+0

感谢@hdcerberus,你让我走上正轨。我有足够的权限,但根据[文档](https://developers.google.com/admin-sdk/directory/v1/reference/members/list),“Admin.Members.list”需要一个“groupKey”参数可以是组的ID,电子邮件或别名。我将该行更改为: 'membersPage = AdminDirectory.Members.list(group.id,{maxResults:100,pageToken:membersPageToken});' ......一切都很好。 –