已通过Identity Aware Proxy登录后,如何生成调用API的JWT?
解决方案
你可以借助Firebase Auth的内置状态管理机制,直接获取已登录状态的用户对象,无需重复执行登录流程,具体操作如下:
初始化Auth时确保会话持久化
Firebase Auth默认会保留本地登录会话,你也可以显式配置确认:import { initializeApp } from "firebase/app"; import { getAuth, setPersistence, browserLocalPersistence } from "firebase/auth"; const firebaseConfig = { // 填入你的Firebase配置信息 }; const app = initializeApp(firebaseConfig); const auth = getAuth(app); // 显式设置本地持久化,确保登录状态不丢失 setPersistence(auth, browserLocalPersistence) .then(() => { // 后续Auth操作逻辑 }) .catch((error) => { console.error("持久化设置失败:", error); });监听用户状态自动获取已登录用户
使用onAuthStateChanged监听状态变化,页面加载后如果存在有效登录会话,回调会自动触发并返回当前用户:import { onAuthStateChanged } from "firebase/auth"; onAuthStateChanged(auth, (user) => { if (user) { // 用户已登录,直接调用getIdToken获取有效JWT user.getIdToken().then((token) => { console.log("可用的后端API Token:", token); // 此处可将token用于FastAPI请求的身份校验 }); } else { console.log("当前无登录用户"); } });直接读取currentUser(注意初始化时机)
若不想用监听,也可直接访问auth.currentUser,但要注意Firebase Auth初始化是异步的,页面加载初期可能返回null,可稍作延迟再读取:// 等待Auth初始化完成后读取当前用户 setTimeout(() => { const user = auth.currentUser; if (user) { user.getIdToken().then((token) => { console.log("可用的后端API Token:", token); }); } }, 1000);
原理说明
你的应用已通过IAP的authui完成登录,对应的会话Cookie(GCP_IAP_UID和__Host-GCP_IAP_AUTH_TOKEN_XXX)已存在,Firebase Auth初始化时会自动识别这些会话信息,恢复已登录的用户状态,无需重复调用登录接口。
内容的提问来源于stack exchange,提问作者thattommyhall
相关产品推荐
相关产品推荐

