首页 > 解决方案 > 使用多个帐户登录时如何获取用户的所有电子邮件?

问题描述

我有一所学校的谷歌网络应用程序有一个 G Suite 域,即电子邮件是@theschool.org。该应用程序连接到一个电子表格,其中包含允许访问该应用程序的电子邮件地址(学校的教师)的白名单。页面加载时,所有其他人都会收到“拒绝访问”消息。该脚本用于Session.getEffectiveUser().getEmail()获取用户的电子邮件并将其与列表进行比较。

一些用户使用个人设备或 chromebook 登录他们的个人 gmail 帐户和学校的域帐户。一些实验表明,在这种情况下,Session.getEffectiveUser().getEmail()总是返回首先Session.getActiveUser().getEmail()登录的帐户的电子邮件地址,这意味着即使用户(后来)使用白名单帐户登录,也会被拒绝访问。目前,他们必须注销所有帐户,然后登录学校帐户才能获得访问权限。

我想获取用户当前登录的所有gmail 地址的列表,因此我可以检查其中是否有任何一个在白名单上,避免需要退出并重新登录。有没有办法在里面做到这一点应用脚本?

谷歌关于 User 类和 Session 类的文档没有提到关于多个帐户的任何内容。

标签: google-apps-script

解决方案


我想获取用户当前登录的所有 gmail 地址的列表,因此我可以检查其中是否有任何一个在白名单上,避免需要退出并重新登录。有没有办法在里面做到这一点应用脚本?

回答:

使用 Apps 脚本无法做到这一点。

解释:

Google Apps 脚本是一种基于 JaveScript、基于云的语言,它不在用户的本地计算机上运行。它无法访问本地会话中的任何信息,因此只能查看哪个用户是活动用户、登录并运行脚本。

文档中定义了唯一可通过 Apps 脚本获得的会话信息:

  • getActiveUser()- 获取有关当前用户的信息。
  • getActiveUserLocale()- 以字符串形式获取当前用户的语言设置——例如,en 表示英语。
  • getEffectiveUser()- 获取有关脚本在其权限下运行的用户的信息。
  • getScriptTimeZone()- 获取脚本的时区。
  • getTemporaryActiveUserKey()- 获取活动用户唯一但不透露用户身份的临时密钥。

最后一点很重要——访问本地会话并获取用户身份信息是一个严重的隐私问题。因此,这是不可能的。

参考:


推荐阅读