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

能否在Google Apps Script中通过Session服务或类似方式获取用户ID?

获取Google Apps Script中的永久用户ID(非邮箱)

好问题!确实,Google Apps Script的Session服务本身并没有直接提供获取用户永久ID的方法——默认只能通过Session.getUser().getEmail()拿到用户的邮箱地址。不过我们可以借助Google的其他API来实现和GAE中Users API类似的功能,获取那个不随邮箱变更而改变的唯一用户ID。

下面是两种可行的方案:

方案一:使用Google People API(适用于所有Google账户)

Google People API可以获取用户的personId,这个ID是永久绑定用户身份的,哪怕用户修改了邮箱也不会变。步骤如下:

  1. 启用People API:

    • 在脚本编辑器中,点击「资源」→「高级Google服务」
    • 找到「People API」并开启它,然后点击「确定」
    • (如果提示需要在Cloud Console启用,跟着指引操作即可,GAS的高级服务会帮你关联对应的项目)
  2. 调用API获取用户ID的代码示例:

function getPermanentUserId() {
  // 先获取当前用户的邮箱
  const userEmail = Session.getUser().getEmail();
  
  // 调用People API获取用户的元数据,其中包含永久ID
  try {
    const userPerson = People.People.get(`people/${userEmail}`, {
      personFields: 'metadata'
    });
    // 返回永久用户ID
    return userPerson.metadata.source.id;
  } catch (error) {
    console.error('获取用户ID失败:', error);
    return null;
  }
}

方案二:使用Admin SDK Directory API(仅适用于Google Workspace账户)

如果你是在Google Workspace(原G Suite)环境下开发,Admin SDK的Directory API可以直接获取Workspace用户的永久ID,这个ID在Workspace后台是固定的。

  1. 启用Admin Directory服务:

    • 同样在「高级Google服务」中找到「Admin Directory API」并开启
    • 需要确保你的账户有Workspace管理员权限,或者脚本被授予了访问用户数据的权限
  2. 代码示例:

function getWorkspaceUserId() {
  const userEmail = Session.getUser().getEmail();
  
  try {
    const workspaceUser = AdminDirectory.Users.get(userEmail);
    // 返回Workspace中的永久用户ID
    return workspaceUser.id;
  } catch (error) {
    console.error('获取Workspace用户ID失败:', error);
    return null;
  }
}

注意事项

  • 两种方案都需要用户授权:第一次运行脚本时,会弹出授权窗口,用户需要允许脚本访问他们的个人数据或Workspace用户信息。
  • 普通消费者Google账户只能用方案一,方案二仅限Workspace环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:30:02