在作為系結到公共(免費)Gmail 帳戶中的電子表格的 Web 應用程式發布的 GAS 中,我將來自許多不相關用戶的資訊編譯到該電子表格中,任何 Gmail 用戶帳戶都可以訪問該 Web 應用程式。
但是當腳本以用戶身份運行時,用戶可以訪問應用程式(在用戶授予應用程式權限后),但它會在腳本訪問電子表格的位置停止。用戶被告知請求訪問。我必須將電子表格“共享”給用戶,以便應用程式在以該用戶身份運行時運行,但這是有問題的——潛在用戶太多。
如果在我的帳戶下運行另一個版本的腳本,則用戶可以訪問 web 應用程式,但腳本無法訪問用戶的 Gmail 地址。大問題,因為 webapp 必須具有用戶的 Gmail 地址以進行安全/應用程式訪問控制。
(網路應用程式正在開發中,尚未尋求 Google 的“批準”。)
我如何擁有一個 webapp (a) 可以修改中央電子表格中的內容,(b) 任何 Gmail 用戶都可以訪問,(c) 腳本可以訪問 Session.getActiveUser().getEmail(),以及 (d)用戶不需要對該中央電子表格具有編輯權限嗎?腳本需要的唯一用戶帳戶資訊是用戶 Gmail 地址——同樣用于應用程式訪問控制和安全性。(由于谷歌為我提供了一個鏈接,讓任何人都可以完全訪問電子表格(如果他們也有它的 URL),我不能在任何 Gmail 帳戶下運行系結腳本訪問電子表格時,電子表格內容的完整性通過應用程式的功能和內部訪問控制進行管理?)
如果除了在用戶的 Gmail 帳戶下運行 web 應用程式并授予該用戶對電子表格的編輯權限之外沒有其他解決方案,這是否會造成用戶可以訪問的重大風險(我不會有意/公開披露電子表格的 URL)改變網路應用程式執行的插入/編輯功能之外的電子表格?如果這種風險很低,我是否可以在 web 應用程式中使用一個功能來自動授予 Gmail 帳戶的電子表格編輯權限,當其 Gmail 地址預先注冊在 web 應用程式的用戶串列中時?
謝謝!
uj5u.com熱心網友回復:
讓我從 c) 開始:除了容器/腳本所有者之外,沒有辦法讓它Session.getActiveUser().getEmail()適用于免費的 Google 帳戶(即 gmail.com 帳戶)。
關于 a) b) 和 d) 您可以使用 Google Sheets API 通過使用 UrlFetch 服務和服務帳戶而不是電子表格服務或高級表格服務來呼叫它。
關于允許任何人編輯中央電子表格,一旦他們使用谷歌表格應用程式或網路應用程式打開它,他們將能夠在谷歌驅動器>與我共享等其他地方找到電子表格......恕我直言就出現問題的可能性而言,風險很大,但就影響而言,取決于幾個因素,即使用版本歷史記錄可能會恢復某些更改,但電子表格可能會損壞。如果您沒有大量使用 Google 表格版本歷史記錄,最好先深入熟悉它,然后再將其作為備份/災難恢復的主要工具。
來自https://developers.google.com/apps-script/reference/base/session#getactiveuser
獲取活動用戶()
獲取有關當前用戶的資訊。如果安全策略不允許訪問用戶的身份,User.getEmail() 回傳一個空白字串。電子郵件地址可用的情況各不相同:例如,用戶的電子郵件地址在任何允許腳本在未經用戶授權的情況下運行的背景關系中都不可用,例如簡單的 onOpen(e) 或 onEdit(e) 觸發器、 Google 表格中的自定義函式,或部署為“以我身份執行”的網路應用程式(即由開發人員而非用戶授權)。但是,如果開發者自己運行腳本或與用戶屬于同一個 Google Workspace 域,則這些限制通常不適用。
有關的
- 使用 Apps 腳本 URLFetchApp 訪問 Google 資料存盤區資料
- Google 服務帳戶/API - 我不斷收到錯誤訊息:訪問權限未授予或已過期。(第 454 行,檔案“服務”)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/434968.html
