我希望我明确邀请的人可以访问我的UiApp(GAS)应用程序 。
我不想发布我的应用程序以进行公共访问,但更喜欢为某些人提供一个链接(桌面快捷方式)到共享磁盘上的html文件(所以我只需要更新我的应用程序的链接,如果我更新它)。
在尝试实现这一目标时,我遇到了一些问题。
问题-1
我不希望用户能够看到我的代码
我怎样才能做到这一点?
问题-2
如果我执行应用程序 me 我无法检索实际用户(Session.getActiveUser()和Session.getEffectiveUser()都返回' me')并因为我不知道要显示的电子邮件或日历
如何检索允许显示实际用户的电子邮件和日历的信息(所以不要'我')
即使在启动应用程序时需要额外的参数,我也可以接受。
问题-3
我注意到,如果项目使用库,则应用程序不会运行,除非用户自己明确定义库。对我来说,似乎用户应该与此无关。如何避免这个问题(除了不使用库)?
就我而言,我使用库来记录一些信息。此库不位于共享磁盘上。即使我禁用了库(因此日志将转到系统默认记录器),应用程序也无法运行,因为会显示一条消息,指出库已丢失(并参考资源')。
我该怎么做才能避免这个问题?
答案 0 :(得分:0)
这个问题需要很长时间才能回答,但我会尝试简短说明:
为了说明,这是我用来控制webapp访问的一段代码:
function doGet() {
var clientOK = false;
var client = PropertiesService.getScriptProperties().getProperty('clients').split();
var email = Session.getActiveUser().getEmail();
var app = UiApp.createApplication().setTitle('Order form').setStyleAttribute('background', 'beige');
var mainPanel = app.createAbsolutePanel().setStyleAttribute('padding','25');
var reject = app.createHTML("Hello,<BR><BR>You are connected with the address <B>"+email+"</B> that is not allowed to access this form,<BR><BR>"+
"Please contact the webMaster if you think this is an error.<BR><BR>Thank you.").setStyleAttribute('padding','25');
if(clients.join().match(email) == email){ clientOK = true ; var nom = email };
if(!clientOK){
app.add(reject)
MailApp.sendEmail('myEmail@gmail.com', 'attempt to log in form', email+' tried to access the form and has been rejected. Think about asking him what happened !')
return app
}
// continue normal code...
编辑问题3:如果您使用的图书馆写入电子表格(作为记录器目的地),则此电子表格也必须与这些用户共享。即使他们不需要从他们的驱动器打开该电子表格,他们也可以这样做,因为它将出现在他们与我共享的电子表格中。查看他们的驱动器。也就是说,一旦开发阶段结束,你可以摆脱它吗?