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

如何修改Google Directory API代码避免二次登录获取企业用户列表?

解决Google Directory API获取用户列表无需二次登录的方案

你当前的代码仅使用API_KEY初始化gapi客户端,只能访问公开数据,而Directory API属于私有企业数据,需要携带OAuth 2.0访问令牌且拥有对应权限才能调用。同时要复用已有的登录会话,避免二次登录,需从以下几个方面调整:

1. 调整Google登录按钮的权限范围

确保登录时请求Directory API的用户只读权限,这样登录成功后就能获取到具备对应权限的访问令牌。修改登录按钮的data-scope属性:

<div class="g-signin2" data-onsuccess="onSignIn" data-scope="openid email https://www.googleapis.com/auth/admin.directory.user.readonly"></div>

2. 修改前端代码复用登录后的访问令牌

登录成功后提取访问令牌,初始化gapi客户端时传入该令牌,无需重新登录即可调用API:

// 登录成功回调:提取并存储访问令牌
function onSignIn(googleUser) {
  const authResponse = googleUser.getAuthResponse();
  const accessToken = authResponse.access_token;
  // 存储令牌用于页面刷新后复用
  localStorage.setItem('google_access_token', accessToken);
  // 初始化gapi客户端并拉取用户列表
  initializeGapiClient(accessToken);
}

// 初始化gapi客户端,传入访问令牌
async function initializeGapiClient(accessToken) {
  await gapi.client.init({
    apiKey: API_KEY,
    discoveryDocs: [DISCOVERY_DOC],
    // 关键:传入已获取的访问令牌
    access_token: accessToken,
  });
  await listUsers();
}

// 拉取用户列表并填充下拉框
async function listUsers() {
  let response;
  try {
    const request = {
      'customer': 'my_customer',
      'maxResults': 10,
      'orderBy': 'email',
    };
    response = await gapi.client.directory.users.list(request);
  } catch (err) {
    document.getElementById('content').innerText = err.message;
    return;
  }

  const users = response.result.users;
  // 填充下拉框逻辑
  if (users?.length) {
    const userSelect = document.getElementById('user-select');
    users.forEach(user => {
      const option = document.createElement('option');
      option.value = user.id;
      option.textContent = user.primaryEmail;
      userSelect.appendChild(option);
    });
  } else {
    document.getElementById('content').innerText = '未找到可用用户';
  }
}

// 页面加载时检查是否已有登录令牌
document.addEventListener('DOMContentLoaded', () => {
  gapi.load('client', () => {
    const savedToken = localStorage.getItem('google_access_token');
    if (savedToken) {
      initializeGapiClient(savedToken);
    } else {
      document.getElementById('content').innerText = '请先完成登录';
    }
  });
});

3. 关键注意事项

  • 确保你的Google Cloud项目已启用Admin SDK API;
  • 登录用户必须是Google Workspace的管理员账号,或被授予了读取企业用户的权限;
  • 访问令牌会过期(默认1小时),如果需要长期有效,可以在登录时设置access_type=offline以获取refresh_token,用于自动刷新令牌;
  • 不要在前端暴露敏感凭证,确保令牌仅在已登录的管理员会话中使用。

内容的提问来源于stack exchange,提问作者blackstone

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:55:30