1

Admin SDK를 실험 중이며 그룹 회원을 Google 스프레드 시트에 나열하려고합니다. 이 오류가 표시되는 AdminDirectory.Members.list 전화를 들어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()); 
} 

: 여기에 내가 함께 왔어요 코드의이 리소스/API에 액세스 할 수있는 권한이

하지

것은 분명하기 Admin SDK 디렉토리 서비스가 리소스> 고급 Google 서비스 ... 및 Google 개발자 콘솔 아래에 enabled되었습니다.

또한이 스크립트를 실행하는 사용자는 API 탐색기를 사용하여 예상 결과를 성공적으로 검색 할 수 있습니다.

내가 뭔가를 간과 한 적이있다. 매우 또는 "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, 당신은 나를 올바른 길로 인도합니다. 충분한 권한이 있지만 [documentation] (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)); ' ... 모두 괜찮습니다. –