You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 01:30:57