AdminDirectory.Members.list授权错误 [英] AdminDirectory.Members.list Authorization error

查看:158
本文介绍了AdminDirectory.Members.list授权错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在试用Admin SDK并尝试在Google Spreadsheet中列出群组成员。这里是我提出的代码:
$ b $ pre $ function recordGroupsMembers(){
var ss = SpreadsheetApp.getActiveSpreadsheet( );

//获取所有组
var groupPageToken,groupPage;
do {
groupPage = AdminDirectory.Groups.list({
domain:'mydomain.com',
maxResults:100,
pageToken:groupPageToken
});
var groups = groupPage.groups;
if(groups){
//迭代组
用于(组中的变量i){
var group = groups [i];

//获取组
的成员var membersPageToken,membersPage;
do {
membersPage = AdminDirectory.Members.list(group,{
maxResults:100,
pageToken:membersPageToken
});
var members = membersPage.members;
if(members){
//迭代组成员
(成员中的var j){
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目录服务已被资源>高级Google服务... 和Google开发者控制台中的 Enable_advanced_servicesrel =nofollow>启用

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



我得到的印象我忽略了非常简单或声明中存在一个错误: Apps脚本自动处理授权流程

解决方案

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



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

  a)您没有足够的管理权限访问此API(基本上,您不是SuperAdmin)。 

b)该域名在您的实时代码中拼写错误(我甚至不愿意提及这一点,但错误确实发生)。

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

 未授权访问此资源/ api 

当这两个问题之一适用。



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

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

第21行。



这是因为这一行:

  var group = groups [i]; 

看起来像它只是返回一个带有组名称的字符串,但实际上它的返回类似于:

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

这是一个简单的解决方法,我们将其替换为:

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

它会返回我们正在查找的结果。

I'm experimenting with Admin SDK and trying to list Group Members in a Google Spreadsheet. Here's the code I've come up with:

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

For the AdminDirectory.Members.list call, this error is shown:

Not Authorized to access this resource/api

To be clear, the Admin SDK Directory Service has been enabled under Resources > Advanced Google services…, and in the Google Developer Console.

Also, the user running this script is able to successfully retrieve expected results using the API Explorer.

I get the impression I've either overlooked something very simple or there's a bug in the statement that "Apps Script handles the authorization flow automatically".

解决方案

Basically, this script has two issues.

Not Authorized to access this resource/api -> This has at least two possible causes:

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).

Otherwise, this part works fine for me 'As is' and I can only reproduce the:

Not Authorized to access this resource/api

when one of these two issues apply.

Once you resolve this error, you'll hit a 'Bad Request' for:

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

Around line 21.

This is because the line:

    var group = groups[i];

Looks like it's just returning a string with the name of the group, but in actually it's returning something like:

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

This is a simple fix, we just replace this with:

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

And it will return the results we're looking for.

这篇关于AdminDirectory.Members.list授权错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆