Google应用脚本的Session.getActiveUser()不适用于跨域用户

时间:2016-12-30 10:39:55

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

我正在使用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()时,从其他域中,然后它会记录登录用户。

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

1 个答案:

答案 0 :(得分:0)

我认为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