Google Sheets插件中如何持久化Firebase Auth身份认证会话?
Firebase Auth在Google Sheets插件中的适配方案
方案1:自定义Firebase Auth持久化层(推荐)
Firebase Auth原生支持替换底层存储实现,无需修改原有业务认证逻辑,完全适配Google Sheets插件环境:
1. 实现自定义存储适配类
Firebase Auth要求持久化层实现getItem、setItem、removeItem三个异步方法,我们封装一层对接Google Apps Script的Properties服务:
// 插件前端自定义持久化类 class GASPropertiesPersistence { // 对齐Firebase本地持久化类型标识 type = 'LOCAL'; // 封装google.script.run异步调用 #invokeGASMethod(method, ...args) { return new Promise((resolve, reject) => { google.script.run .withSuccessHandler(resolve) .withFailureHandler(reject) [method](...args); }); } async getItem(key) { return this.#invokeGASMethod('getUserProperty', key); } async setItem(key, value) { return this.#invokeGASMethod('setUserProperty', key, value); } async removeItem(key) { return this.#invokeGASMethod('deleteUserProperty', key); } }
2. 实现Google Apps Script后端存储接口
在插件的.gs代码文件中添加Properties操作方法:
// 读取用户私有属性 function getUserProperty(key) { return PropertiesService.getUserProperties().getProperty(key); } // 写入用户私有属性 function setUserProperty(key, value) { PropertiesService.getUserProperties().setProperty(key, value); } // 删除用户私有属性 function deleteUserProperty(key) { PropertiesService.getUserProperties().deleteProperty(key); }
3. 初始化Firebase Auth时替换持久化
注意不要使用默认的getAuth方法初始化,否则会自动加载浏览器默认存储实现抛出错误,改用initializeAuth传入自定义持久化:
import { initializeApp } from '@firebase/app'; import { initializeAuth } from '@firebase/auth'; const firebaseApp = initializeApp({ // 替换为你的Firebase项目配置 apiKey: "xxx", authDomain: "xxx", projectId: "xxx", }); const auth = initializeAuth(firebaseApp, { persistence: new GASPropertiesPersistence(), // 无需弹窗/重定向登录的情况下可留空 popupRedirectResolver: undefined });
配置完成后原有signInWithEmailAndPassword、onAuthStateChanged、getIdToken等所有Firebase Auth方法均可正常使用,Firebase会自动处理令牌存储、刷新逻辑。
方案2:服务端代理认证(无前端第三方依赖)
如果要完全遵循Google官方不建议在插件中使用第三方库的要求,可以通过后端代理所有Firebase Auth请求:
- 前端收集用户登录凭证后传给Google Apps Script后端
- 后端直接调用Firebase Auth REST API完成认证,将ID令牌、刷新令牌、过期时间存储到用户私有Properties中
- 前端需要使用令牌时向后端请求,后端检测令牌过期自动用刷新令牌换发新令牌
该方案优势是无需在前端引入任何Firebase相关依赖,体积更小、兼容性更好。
注意事项
- Properties服务的用户私有属性仅当前登录的Google账号可访问,存储Firebase敏感令牌符合安全要求
- 无需引导用户修改Cookie权限,所有操作均在Google Sheets插件原生能力范围内实现
内容的提问来源于stack exchange,提问作者alexstio
相关产品推荐
相关产品推荐

