You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在独立Python脚本中以普通用户身份验证访问Firebase Firestore(无需管理员权限服务账号)

解决方案:用Firebase Auth普通用户身份访问Firestore(无需服务账号)

完全可以实现!你考虑的用普通用户身份通过Firebase Auth登录,再访问Firestore的思路完全正确,而且不用自己造轮子,也不用额外编写后端端点——Firebase原生就支持这种客户端侧的访问模式,Python也有维护良好的第三方库可以直接用。

这种方式的核心优势是:每个员工用自己的Firebase Auth账号登录,权限由Firestore的安全规则严格控制,彻底避免了服务账号的全能权限风险,同时完全符合BaaS的轻量化需求。

具体实现步骤

1. 选择合适的Python库

推荐使用pyrebase4(这是原pyrebase的维护分支,适配了最新的Firebase API),它模拟了Web端Firebase SDK的功能,支持邮箱/密码登录、Firestore操作等核心能力。

安装命令:

pip install pyrebase4

2. 获取Firebase Web应用配置

从你的Firebase控制台中,找到对应项目的Web应用配置(不是服务账号的JSON文件),里面包含apiKey、authDomain、projectId等字段——这些是客户端SDK初始化必需的信息,完全安全可以分发给员工(它们只是标识你的Firebase项目,没有权限)。

3. 编写Python脚本

脚本支持从环境变量读取配置和账号信息,或者运行时让员工输入,避免硬编码敏感数据:

import pyrebase
import os

# 从环境变量加载Firebase配置,或直接填入(推荐用环境变量)
firebase_config = {
    "apiKey": os.getenv("FIREBASE_API_KEY"),
    "authDomain": os.getenv("FIREBASE_AUTH_DOMAIN"),
    "projectId": os.getenv("FIREBASE_PROJECT_ID"),
    "storageBucket": os.getenv("FIREBASE_STORAGE_BUCKET"),
    "messagingSenderId": os.getenv("FIREBASE_MESSAGING_SENDER_ID"),
    "appId": os.getenv("FIREBASE_APP_ID")
}

# 初始化Firebase应用
firebase = pyrebase.initialize_app(firebase_config)
auth = firebase.auth()
db = firebase.firestore()

# 获取用户登录凭证(优先环境变量,否则运行时输入)
user_email = os.getenv("FIREBASE_USER_EMAIL") or input("请输入你的Firebase账号邮箱:")
user_password = os.getenv("FIREBASE_USER_PASSWORD") or input("请输入你的账号密码:")

try:
    # 邮箱密码登录
    user = auth.sign_in_with_email_and_password(user_email, user_password)
    # 刷新令牌避免过期(可选,但长期运行的脚本建议加上)
    user = auth.refresh(user["refreshToken"])
    id_token = user["idToken"]
    
    # 示例:读取Firestore集合数据
    print("正在读取数据...")
    collection_ref = db.collection("你的目标集合名称")
    docs = collection_ref.get()
    for doc in docs:
        print(f"文档ID: {doc.id},内容: {doc.to_dict()}")
        
except Exception as e:
    print(f"登录或数据读取失败:{str(e)}")

4. 配置Firestore安全规则

这一步是关键!必须通过安全规则限制登录用户的访问权限,比如只允许已认证用户读取特定集合,或者只能访问自己的数据:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // 示例1:允许所有已认证用户读取指定集合
    match /你的目标集合名称/{document} {
      allow read: if request.auth != null;
      // 如果需要写入权限,按需添加:allow write: if request.auth != null;
    }
    
    // 示例2:更细粒度权限——用户只能读取自己创建的文档(假设文档包含uid字段)
    // match /user-data/{document} {
    //   allow read: if request.auth.uid == resource.data.uid;
    // }
  }
}

额外说明

  • 账号管理:你可以在Firebase控制台的Auth模块中创建员工账号,或者开启邮箱/密码注册让员工自行注册(根据你的需求选择)。
  • 安全保障:员工的账号密码只用于Firebase Auth登录,不会接触到任何服务账号信息;所有数据访问都受安全规则约束,彻底规避权限泄露风险。
  • 替代方案:如果不想用第三方库,也可以直接调用Firebase Auth的REST API获取ID token,再用这个token调用Firestore的REST API,但pyrebase4已经封装了这些细节,更省心。

内容的提问来源于stack exchange,提问作者Michał Gacka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 12:52:36