AdminDirectory Users分页失效:重复获取用户陷入无限循环
问题分析与解决
你的代码陷入无限循环、反复返回相同100个用户的核心原因:错误地将pageToken放在了请求的options对象中,Google Apps Script的UrlFetchApp.fetch不会自动把这个参数映射到URL查询参数里,导致每次请求都没传递分页令牌,服务器永远返回第一页数据,nextPageToken始终存在,循环无法终止。
修正后的代码
function myFunction() { var loggedUser = Session.getActiveUser().getEmail(); var domain = loggedUser.split('@')[1]; var pageToken; var emails = []; do { // 拼接请求URL,带上domain和分页令牌(如果存在) var url = 'https://www.googleapis.com/admin/directory/v1/users?domain=' + encodeURIComponent(domain); if (pageToken) { url += '&pageToken=' + encodeURIComponent(pageToken); } var options = { "method": "get", "muteHttpExceptions": true, "headers": { "Authorization": "Bearer " + ScriptApp.getOAuthToken() }, "contentType": "application/json", }; var res = UrlFetchApp.fetch(url, options); var page = JSON.parse(res.getContentText()); var users = page.users; if (users) { for (var i = 0; i < users.length; i++) { var user = users[i]; Logger.log(user.primaryEmail); emails.push(user.primaryEmail); } } else { Logger.log('No users found.'); } pageToken = page.nextPageToken; } while (pageToken); Logger.log('Total users fetched: ' + emails.length); }
关键改动说明
- 分页令牌传递方式修正:将
pageToken作为URL的查询参数拼接,而非放在options对象中,确保服务器能识别并返回下一页数据 - URL编码处理:用
encodeURIComponent对domain和pageToken编码,避免特殊字符导致的URL解析错误 - 响应文本获取优化:改用
res.getContentText()明确获取响应内容,避免直接转换HTTPResponse对象可能出现的异常
内容的提问来源于stack exchange,提问作者Ahmad Labib Mansour
相关产品推荐
相关产品推荐

