如何保护GAS网站与(Google)认证?



我有工作谷歌应用程序脚本项目部署为Web应用程序。一切正常

。我意识到我需要为每个用户个性化网站。我使用谷歌电子表格作为后端数据存储解决方案。我想要简单但安全的用户认证方式。我当然想到了谷歌。

  • 将Google Sign-In集成到您的web应用程序中似乎有点复杂
  • 因为我可以使用内置功能如何部署网站它self

我使用Legacy free edition of G Suite account(我是管理员)来运行我的web应用程序。因此,我使用以下设置部署了web应用程序

  • 以用户身份访问web应用
  • 谁可以访问任何人与谷歌帐户

现在我能够识别访问web应用程序的用户-我从Session.getActiveUser().getEmail();完美地获得了他们的电子邮件。然后我想保存他们所有的数据在"他们自己的"电子表格中。当我用DriveApp.createFile(fileName, 'Hello, world!')保存文件时,文件保存在他们的谷歌光盘上。我希望所有的应用程序数据都在我的磁盘.

所以我创建了一个新项目- library -并作为library部署,并将电子邮件传递给它,因为它将是文件名。它的工作,如果我访问网络作为我-两个项目的所有者。如果我作为其他人访问网络,我得到了这个错误We're sorry, a server error occurred while reading from storage. Error code NOT_FOUND。我为这个问题创建了另一个SO问题,实际上它看起来像是一个bug。

然后我将这个库部署为一个web应用程序,设置如下

  • 作为Me执行
  • 谁可以访问任何人,我也尝试过任何人与谷歌帐户

我相信我不是唯一一个寻找工作解决方案的人,如何为我的GAS网络创建一些认证之王。

谁能建议你如何在你的网站上做到这一点?

有三种方法可以在你的webApp上验证用户。

  1. 将google -sign集成到您的web应用程序(推荐)

  2. 作为访问web应用程序的用户执行并使用Session.getActiveUser().getEmail();检索用户电子邮件(它有效,但用户必须允许访问他们的帐户才能使用web应用程序和GAS项目限制可以访问的用户数量)

  3. 制作自己的登录表单,使用自己的数据库验证用户,并使用HTML/Javascript存储令牌(因为GAS不允许您创建cookie)(不推荐,它不是真正安全的)

我建议使用谷歌登录选项,但既然你说你认为它有点复杂,那么你可以使用第二个选项(执行应用程序作为用户),并在你的谷歌光盘上创建一个文件的问题,而不是用户的光盘,你有2个选项:

  1. 在你的谷歌光盘上创建一个文件夹,并将其公开或使用你的webApp与帐户共享,然后更改代码,以便文件在你的文件夹上创建。

    var myFolder = DriveApp.getFolderById('123'); myFolder.createFile(fileName, 'Hello, world!');

  2. 如果你不想共享文件夹,那就把它设为私有,创建第二个webApp,在你的文件夹上做读写文件的事情,然后将其发布为执行为我,然后使用fetch(URL)从第一个webApp调用第二个webApp;方法。

https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app

最新更新