我已将工作 Google 应用程序脚本项目部署为 Web 应用程序。一切正常。
但是。我意识到我需要为每个用户个性化网站。我使用 Google 电子表格作为后端数据存储解决方案。我想要简单但安全的用户身份验证方式。我当然想到了 Google。
我正在使用 Legacy free edition of G Suite account
(我是管理员)来运行我的网络应用程序。所以我使用这些设置部署了 Web 应用程序
现在我能够识别访问 Web 应用程序的用户 - 我从 Session.getActiveUser().getEmail();
收到了他们的电子邮件,非常完美。然后我想将他们所有的“数据”保存在“他们自己的”电子表格中。当我使用 DriveApp.createFile(fileName, 'Hello, world!')
保存文件时,文件会保存在他们的 Google 光盘上。我希望所有应用程序数据都在我的光盘上。
所以我创建了一个新项目 - 库 - 并部署为库并将电子邮件传递给它,因为它将是文件名。如果我以我的身份访问网络 - 两个项目的所有者,它就会起作用。如果我以其他人身份访问网络,则会收到此错误 We're sorry, a server error occurred while reading from storage. Error code NOT_FOUND
。我为此问题创建了另一个 SO question,实际上它看起来像是一个 bug。
然后我将库部署为具有这些设置的 Web 应用程序
我确信我不是唯一一个在寻找如何为我的 GAS 网络创建某种身份验证之王的可行解决方案。
谁能建议您如何在您的网站上做到这一点?
答案 0 :(得分:3)
有 3 种方法可以在您的 web 应用程序上对用户进行身份验证。
将 Google 登录集成到您的网络应用(推荐)
以访问 web 应用程序的用户身份执行并使用 Session.getActiveUser().getEmail();
检索用户电子邮件 (它可以工作,但用户必须允许访问其帐户才能使用 web 应用程序和 GAS 项目限制数量可以访问的用户数)
制作您自己的登录表单,使用您自己的数据库验证用户,并使用 HTML/Javascript 存储令牌(因为 GAS 不允许您创建 cookie)(不推荐,它不是很安全)
我建议使用谷歌登录选项,但既然你说你认为它有点复杂,那么你可以使用第二个选项(以用户身份执行应用程序)以及创建文件的问题在您的谷歌光盘而不是用户光盘上,您有两个选项:
在您的 google 光盘上创建一个文件夹并将其设为公开或与使用您的 web 应用程序的帐户共享,然后更改您的代码以便在您的文件夹中创建文件。
var myFolder = DriveApp.getFolderById('123'); myFolder.createFile(fileName, 'Hello, world!');
如果您不想共享该文件夹,请将其设为私有,然后创建第二个 webApp 来读取/写入您文件夹中的文件,然后将其发布为像我一样执行,然后使用 fetch(URL)
从第一个 webApp 调用第二个 webApp;方法。
https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app