Session.getActiveUser()。getEmail()解决方法,用于从电子表格中分配成绩

时间:2012-10-16 03:54:56

标签: google-apps-script

我的学生都有一个谷歌帐户,但使用不同的电子邮件(如john@hotmail.com)。我试着写一个webapp,从我的成绩电子表格中获取带有webapp用户电子邮件地址的行,以便每个学生只会看到他或她的成绩。该webapp使用:Session.getActiveUser()。getEmail()

这仅适用于与脚本位于同一域的用户,我必须以webapp用户身份运行脚本(这是好的 - 我的学生相信我这么远!)。这是限制:

  

返回描述当前用户的User对象。在   有限特权执行(例如响应onOpen或   onEdit),我们只返回活动用户的身份   用户和脚本所有者属于同一个域。这是为了   保护可能不想要他们的电子邮件的消费者用户的隐私   地址暴露。

我的脚本有效,但我必须将成绩表直接放在脚本中,并在每次更新电子表格时更新webapp。 Yeck!

我无法分享我的成绩电子表格,因为他们会看到对方的成绩。所以现在我正在集思广益其他解决方法。

以下是一个例子:

  1. 分享第二个电子表格,使用加密等级的更新功能从我的电子表格中复制成绩。 webapp从共享电子表格中提取数据并解密。现在只需要一个简单的电子表格更新 - 不需要重新发布webapp。 (有一些简单的加密选项,比如base64encode可能有点争吵......?)

  2. 找到一种自动更新webapp并重新发布的方法。 (不知道该怎么做。)

  3. ????

  4. 有什么建议吗?

    PS:如果1似乎可行,对简单加密代码有一些建议吗?

4 个答案:

答案 0 :(得分:2)

  

有一些简单的加密选项,比如base64encode可能有点加扰......?

是的,GAS具有使用Base64算法进行编码/解码的功能 - Utilities.base64EncodeUtilities.base64Decode,但我认为,即使使用a little scrambling,它也不是一个选项。学生非常聪明。我的意见是使用加密算法的JavaScript实现,例如Blowfish。 JavaScript上有许多实现(herehere)。这些实现应该在GAS环境中工作,无需任何更改或进行少量修改。将源代码复制并粘贴到GAS编辑器就足够了。

答案 1 :(得分:1)

我不明白为什么你说“我的脚本有效,但我必须将等级表直接放在脚本中,并在每次更新电子表格时更新webapp”

使用flextable创建一个显示电子表格一部分的webapp非常容易。该应用的每个实例都会自动拥有与用户相关的内容,您只需更新主电子表格即可获得所需内容。我不知道你为什么要为此编码数据...我认为通过谷歌登录的用户身份证明应该足够了,不是吗? {@ 3}}这样的网络应用程序,您看到的数字来自主电子表格中的特定列(对于此公共副本,我将应用程序设置为以“我”运行以避免授权过程,但实际上每个用户都是确定并仅查看他的数据。)

电子表格本身和代码为Here is an example,如果您需要更多信息,请随时回来。

答案 2 :(得分:1)

是否可以将工作表与scriptDB同步? 然后查询用户= loginID

的DB

答案 3 :(得分:1)

目前正在开展一个名为gGradebook的项目,它可以完全满足您的需求:http://www.gclassfolders.com/standalone-resources/ggradebook