【问题标题】:Google app script's Session.getActiveUser() not working for cross domain usersGoogle 应用脚本的 Session.getActiveUser() 不适用于跨域用户
【发布时间】:2019-02-11 06:23:34
【问题描述】:

我正在使用 Google App Script 和 Google Spreadsheet onOpen() 触发器。我在 Google 电子表格中锁定了登录用户。

同样的限制是它没有记录我在论坛上找到的跨域的电子邮件 ID。

这是相同的代码:

function onOpen(e)
{ 
  try
  {
    var ui = SpreadsheetApp.getUi();
    ui.createMenu('Action')
    .addItem('Add Data', 'addData')
    .addToUi()  

    var sheet =SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Login Details");
    sheet.appendRow([Session.getActiveUser().getEmail(),new Date()]);

  }
  catch(e)
  {
    Logger.log(e);
  }
}

onOpen() 功能的一个观察结果:

1] 我是电子表格的所有者,它只记录我们公司域的电子邮件 ID。 (电子表格的自动onOpen())

2] 当我打开电子表格的有界脚本并运行 onOpen() 从其他域时,它会记录登录的用户。

这背后的原因是什么?跨域用户是否有任何解决方法?

【问题讨论】:

  • “不在我在论坛上找到的跨域记录电子邮件 ID”是什么意思,什么论坛?而且在您的第二次观察中,您说它登录了用户,那么问题是什么?是记录还是不记录电子邮件ID?是的,它只会获取登录用户。如果要获取已授权脚本的用户,请使用 getEffectiveUser()。请解释我提到的上述几点。
  • @ShyamKansagra:在 StackOverflow 和link 上。假设我的域是 abc.com,客户域是 xyz.com,那么功能在 abc.com 上运行良好。意味着当我使用 poonam@abc.com 登录时,它会将用户名记录在“登录详细信息”工作表中。但是,如果我使用 client@xyz.com 登录,那么我会得到空白用户名。根据每秒观察,当我使用 client@xyz.com 登录并打开脚本编辑器并运行 onOpen 然后它将电子邮件 ID 记录为 client@xyz.com 但直接打开电子表格时不会。
  • 可能是因为您一定忘记在 client@xyz.com 上设置触发器 ....请检查您是否在域中设置了 onOpen() 触发器,那么您必须同样设置也可以在客户端 ID 上触发,触发器不会与代码一起复制。
  • @ShyamKansagra:我已经在 client@xyz.com 上设置了触发器,但问题仍然存在。但通常 onOpen() 是一个简单的触发器,它会在用户打开谷歌电子表格时自动设置。
  • 你能分享你的工作表吗?另外,您是否从 catch 部分获取任何日志?

标签: google-apps-script google-sheets cross-domain


【解决方案1】:

我认为Session.getActiveUser().getEmail() 在该人不是所有者时在外部域上的 onOpen 触发器存在问题。

此外,每分钟自动触发器也无法记录活动用户。

解决方法如下:

在电子表格本身中添加菜单,单击该选项将运行该功能以附加您想要的行。因为,当我们从脚本手动运行函数时,Session.getActiveUser().getEmail() 正在工作。

使用此代码:

function addMenu()
{
  var ui = SpreadsheetApp.getUi();

  ui.createMenu('Log user')
      .addItem('Run script', 'appendRow')
    .addToUi()
}

并且还添加了这个功能:

function appendRow()
{ 
  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("YOUR_SHEET").appendRow([Session.getActiveUser().getEmail(),new Date()]);
}

现在,只要您想记录活动用户,请转到该记录用户并点击运行脚本,它会追加该行。

另外,不要忘记在客户端甚至您的一侧为 addMenu() 函数设置 onOpen 触发器。

更多详情,我们可以阅读:Class session

【讨论】:

  • 感谢您的解决方法,但我想在打开电子表格时记录用户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 2013-04-12
  • 1970-01-01
相关资源
最近更新 更多