Google插件中Script Properties的跨用户/跨项目留存问题
Script Properties 凭据存储问题解答
首先明确核心:Script Properties 是绑定到具体 Google Workspace 项目(如 Sheet、Doc)的项目级存储——同一项目内的所有有权限用户共享这些属性,但不同项目、不同用户的插件实例之间完全隔离。
问题1解答
User2 下载同款插件后,会被要求录入自身凭据。
因为 User2 安装插件后,插件会关联到他自己的 Google Workspace 项目(比如他新建的表格),这个项目的 Script Properties 是空的,和 User1 的项目存储完全独立,所以会触发录入提示。
问题2解答
User1 在项目1中录入的凭据,在项目2中使用该插件时不可用,必须重新录入。
每个 Google Workspace 项目都有独立的 Script Properties 存储空间,插件在不同项目运行时,访问的是对应项目的属性数据,跨项目不共享任何存储内容。
补充代码优化建议
你的当前代码每次运行都会强制弹出录入框覆盖原有凭据,建议增加判断逻辑,仅在凭据为空时才触发录入:
let properties = PropertiesService.getScriptProperties(); let username = properties.getProperty('username'); let password = properties.getProperty('password'); const ui = SpreadsheetApp.getUi(); // 补充ui初始化,原代码可能遗漏 // 仅当凭据缺失时才弹出录入框 if (!username || !password) { const usernamePrompt = ui.prompt("User Credentials", "Enter username", ui.ButtonSet.OK_CANCEL); username = usernamePrompt.getResponseText(); const passPrompt = ui.prompt("User Credentials", "Enter Password", ui.ButtonSet.OK_CANCEL); password = passPrompt.getResponseText(); properties.setProperty('username', username); properties.setProperty('password', password); }
内容的提问来源于stack exchange,提问作者Gaijin
相关产品推荐
相关产品推荐

