【问题标题】:Get user email without full permissions在没有完全权限的情况下获取用户电子邮件
【发布时间】:2020-06-04 17:02:05
【问题描述】:

我需要获取访问网络应用程序的用户的电子邮件。该网络应用程序嵌入在谷歌网站中。 我知道如何通过以下方式做到这一点:

var email = Session.getActiveUser().getEmail();

但是,这需要用户授予脚本权限,并且权限消息非常可怕:它允许代表用户发送电子邮件、修改他/她的任何 google 表格等等。

有没有办法避免仅仅为了获取用户电子邮件而获得如此广泛的权限?

更新:我的脚本也需要更新工作表,但不必由用户更新。但是,我需要用户自己运行应用程序来获取他们的电子邮件。

【问题讨论】:

  • 嗯,当然可以 - 毕竟,您的应用程序似乎对用户的行为表现得更多,而不仅仅是请求访问电子邮件(您可能使用了 SpreadsheetAppGmailApp / MailApp )。 getActiveUser() 所需的唯一范围是 userinfo.email。除非您将您的应用程序部署为“像我一样运行”,否则您必须告诉您的用户他们需要做出有意识的决定是否信任您的应用程序所需的所有信息。请记住,通过这样做,该应用将代表您采取行动并使用您的配额
  • 根据您所做的工作,您可以通过手动编辑您的 appsscript.json 文件来利用更有限的范围。但您可能不会删除所有可怕的权限警告。
  • 您实际上是对的,我还需要根据选择更新工作表(但我可以以我而不是用户的身份写回工作表)。虽然没有发送电子邮件。所以我需要以用户而不是我的身份运行脚本的唯一原因就是获取他们的电子邮件(这样我就可以根据他们的身份只显示很少的信息)

标签: google-apps-script google-oauth


【解决方案1】:

问题中提到的权限

它允许代表用户发送电子邮件,修改他/她的任何谷歌表格,等等。

无关
Session.getActiveUser().getEmail();

根据https://developers.google.com/apps-script/reference/base/session#getactiveuser上述方法只需要

https://www.googleapis.com/auth/userinfo.email

如果您想要一个不那么“可怕”的权限,您应该必须删除需要它们的方法或在清单和/或项目的 oAuth 同意页面中手动设置 oAuth 范围。

【讨论】:

  • 我明白了。我实际上还需要根据选择更新工作表。但我可以用我的帐户做。我需要用户运行应用程序(而不是像我一样运行)的唯一原因就是知道他们是谁,这样我就可以显示更少的信息。也许我可以在网站中嵌入 2 个网络应用程序,并让用户仅以用户身份运行获得电子邮件的部分?不过对于我这样的初学者来说,这相当复杂。
  • 如果您想请求最低和最低级别的权限,您必须根据需要多少组权限将您的项目一分为二或更多。
猜你喜欢
  • 1970-01-01
  • 2015-01-03
  • 2011-08-17
  • 2017-12-26
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
  • 2013-11-14
相关资源
最近更新 更多