AdminDirectory.Members.list授权错误 [英] AdminDirectory.Members.list Authorization error
问题描述
我正在试用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屋!