如何在GCP中查看并同步Firebase用户表以支持Cloud Run后端查询
问题描述
我首次使用Firebase开发Web应用,通过FirebaseUI实现了用户认证功能。在Firebase控制台的「Authentication」标签页中能查看包含手机号、邮箱等唯一标识的用户表,且我的Firebase项目已关联至GCP项目。
想请教:
- 如何在GCP中查看该Firebase应用的用户表?
- 理想情况是把用户数据存储在Datastore或类似服务中,有没有Firebase与GCP之间的用户同步方法?
- 我需要实现这个同步功能,让Cloud Run里的后端应用能基于用户标识快速查询,还能给用户表添加
preferences这类自定义字段(比如编辑该字段)。
目前我只找到了直接检查用户是否存在于Firebase用户表的Python函数:
from firebase_admin import auth, credentials def is_user_in_firebase(identifier: str) -> bool: try: auth.get_user_by_phone_number(identifier) except auth.UserNotFoundError: return False else: return True
解决方案
一、在GCP中查看Firebase用户表
Firebase认证的用户数据并不直接存储在GCP的Datastore或其他常规存储服务中,可通过以下两种方式在GCP环境中访问:
- 借助Firebase Admin SDK,在Cloud Run、Cloud Functions等GCP服务中调用接口获取用户数据;也可以在本地通过Admin SDK导出完整用户列表。
- 使用Firebase CLI导出用户数据:执行
firebase auth:export users.json命令,将所有Firebase用户导出为JSON文件,之后可手动导入到Datastore或BigQuery中查看、分析。
二、Firebase与GCP的用户同步方法
要实现自动同步并支持自定义字段,推荐两种实用方案:
1. Firebase Auth触发器+Cloud Functions同步到Datastore
这是最直接的自动同步方案:
- 创建Cloud Functions,监听Firebase Auth的用户创建、更新、删除事件(
onCreate、onUpdate、onDelete)。 - 事件触发时,将Firebase用户的核心信息(UID、手机号、邮箱等)同步到Datastore,同时初始化
preferences这类自定义字段。 - 示例Node.js代码(也可使用Python实现):
const functions = require("firebase-functions"); const admin = require("firebase-admin"); admin.initializeApp(); exports.syncUserToDatastore = functions.auth.user().onCreate(async (user) => { const datastore = admin.firestore(); // Firestore与Datastore API兼容,也可直接用Datastore客户端 await datastore.collection("users").doc(user.uid).set({ uid: user.uid, phoneNumber: user.phoneNumber, email: user.email, preferences: {} // 初始化自定义字段 }); }); exports.updateUserInDatastore = functions.auth.user().onUpdate(async (change) => { const user = change.after; const datastore = admin.firestore(); await datastore.collection("users").doc(user.uid).update({ phoneNumber: user.phoneNumber, email: user.email // 可在此添加其他需要同步的Firebase用户字段 }); });
2. 以Datastore为用户主数据层,Firebase Auth作为认证层
如果需要更灵活的自定义字段管理,可调整逻辑:
- 用户注册时,先在Datastore创建包含
preferences等自定义字段的用户记录,再调用Firebase Admin SDK创建对应的Firebase Auth用户。 - 后续更新用户信息时,同时维护Datastore和Firebase Auth的数据,保证一致性。
- 这种方式下,Cloud Run后端直接查询Datastore即可,无需频繁调用Firebase Auth接口,查询效率更高。
三、Cloud Run后端的用户查询与自定义字段编辑
无论采用哪种同步方案,Cloud Run后端都可以:
- 通过Firebase Admin SDK验证用户ID Token,获取UID后直接查询Datastore中的用户记录(包含
preferences字段)。 - 提供API接口,用于编辑
preferences字段,直接更新Datastore数据即可。 - 示例Python代码:
from google.cloud import datastore from firebase_admin import auth datastore_client = datastore.Client() def get_user_preferences(user_uid: str): key = datastore_client.key("users", user_uid) user = datastore_client.get(key) return user.get("preferences", {}) if user else {} def update_user_preferences(user_uid: str, new_preferences: dict): key = datastore_client.key("users", user_uid) user = datastore_client.get(key) if user: user["preferences"] = new_preferences datastore_client.put(user) return True return False
内容的提问来源于stack exchange,提问作者scalar_boson
相关产品推荐
相关产品推荐

