【问题标题】:google script Session.getActiveUser().getEmail() not working谷歌脚本 Session.getActiveUser().getEmail() 不工作
【发布时间】:2013-03-27 04:12:11
【问题描述】:

我用谷歌脚本开发了一个网络应用程序,并在我的 gs 中编写了代码。

var email = Session.getActiveUser().getEmail();
Logger.log(email);
// then do something to render the Email address on the page

发布脚本后,我用另一个帐户登录并执行脚本。

然后页面显示如下:

此应用由其他用户而非 Google 创建。

此应用程序可以访问以下个人信息:电子邮件地址。

但 Log 中仍然没有任何内容,页面也没有显示任何内容。

我只是不明白...

【问题讨论】:

  • 您的应用程序脚本应用程序托管在普通 Gmail 帐户或 Google Apps Enterprise 帐户中?另外,您使用什么设置来发布应用程序?
  • 我不确定日志是否适用于像这样作为网络应用程序运行的脚本。您是否尝试将电子邮件保存在 ScriptProperties 上,或通过电子邮件发送给您?
  • 我托管在我的帐户中,并设置了“以我自己身份执行应用程序”和“谁有权访问该应用程序:任何人”
  • 在开发脚本的时候可以得到自己的Email地址。发布后,我的邮箱可以显示,其他人不可以。
  • 您是否尝试过为活动用户设置执行权限,而不是“以我自己的身份执行应用程序”?

标签: google-apps-script


【解决方案1】:

虽然 Session.GetActiveUser() 的参考文档中没有明确说明,但我的测试确认您的 Web 应用需要在访问 Web 应用的用户时执行才能访问 getActiveUser()。我使用了下面的代码和logging library described here.

根据您的应用程序的用例,也许您可​​以create a library containing a centralized ScriptDB instance 来捕获活动用户电子邮件。然后,创建另一个与您的私人电子表格和相同 scriptDB 库一起使用的项目。

var LOG_FILENAME = 'your-log-doc'
var LOG_PATH = 'folder/subfolder/third-folder'


function doGet() {
  //Change variable above to a good path and filename for you
  var x = LogLibrary.InitializeLogging(LOG_PATH, LOG_FILENAME)
  Logger.log(x)

  var email = Session.getActiveUser().getEmail();
  Logger.log("Start email logging")
  Logger.log(email);
  LogLibrary.fnSaveLog()  //Write the save and flush the logger content

  // then do something to render the Email address on the page
  var HTMLToOutput = '<html><h1>A header</h1><p>' + email + '</p></html>';
  return HtmlService.createHtmlOutput(HTMLToOutput);
}

【讨论】:

  • 这里的第二个链接重定向到日落时间表,所以我认为这不再起作用了。
【解决方案2】:

我做了一些测试,因为我正在寻找解决同一问题的方法,我得出结论:

  • 为了使功能能够工作,网络应用程序应作为“用户访问网络应用程序”执行,为此,网络应用程序应配置为可以作为访问网络应用程序的用户执行
  • 请注意:用户将被要求授权脚本访问、编辑和 管理它的驱动器还接收和发送邮件(这对于大多数 corse 用户来说并不明显!!)。

最终这取决于你将使用它。

在谷歌文档中没有提到这个问题!!

对于一个简单的函数,它将电子邮件地址作为文本返回以用作脚本或在 google html 表单中......等:

function OnOpen(){
var emailName = Session.getActiveUser().getEmail();
var optionsHtml =  emailName.toString().split(",");

     return optionsHtml;
}

【讨论】:

    【解决方案3】:

    查看气体问题论坛(谷歌)。它已被多次解决。基本上,如果您希望来自域外的用户,您需要将其设置为以访问应用程序的用户身份运行。更改该设置很可能会破坏您的应用,具体取决于它需要的权限

    【讨论】:

      【解决方案4】:

      如果您的应用是 2013 年 6 月 25 日之前的应用,并且您正在使用 getEffectiveUser() 或 getUser() 方法,则由于新的授权体验,您需要重新授权脚本。

      您可以在此处查看文档。

      https://developers.google.com/apps-script/scripts_google_accounts#understandingPermissions

      并且不要忘记在部署之前执行脚本。

      【讨论】:

        【解决方案5】:

        如果您想访问用户的电子邮件,请确保您在appsscript .json 中添加了"https://www.googleapis.com/auth/userinfo.email" 电子邮件访问策略

        您可以在此处查看文档。

        https://developers.google.com/apps-script/reference/base/session#authorization

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多