具有匿名凭据的 Firestore 模拟器

Firestore emulator with anonymous credentials

我正在尝试让 Firestore 在本地 Linux PC 上使用 Python 在模拟器模式下工作。是否可以为此使用匿名凭据,这样我就不必创建新凭据?

我尝试了两种从 Python Notebook 中访问 Firestore 数据库的方法,在从命令行获得 运行 firebase emulators:start 之后:

第一种方法:

from firebase_admin import credentials, firestore, initialize_app

project_id = 'my_project_id'

cred = credentials.ApplicationDefault()
initialize_app(cred, {'projectId': project_id})
db = firestore.client()

这会引发以下异常:

DefaultCredentialsError: Could not automatically determine credentials. Please set GOOGLE_APPLICATION_CREDENTIALS or explicitly create credentials and re-run the application. For more information, please see https://cloud.google.com/docs/authentication/getting-started

第二种方法:

from google.auth.credentials import AnonymousCredentials
from google.cloud.firestore import Client

cred = AnonymousCredentials()

db = Client(project=project_id, credentials=cred)

这行得通,但随后我尝试使用以下 Python 代码从数据库访问我已使用 Web 界面手动插入到数据库中的文档:

doc = db.collection('my_collection').document('my_doc_id').get()

然后我收到以下错误,这可能表明匿名凭据不起作用:

PermissionDenied: 403 Missing or insufficient permissions.

想法

这是一个非常复杂的系统,尽管我已经阅读了大量的文档页面、观看了教程视频等,但似乎需要设置无穷无尽的配置迷宫才能使其正常工作。如果我能以最小的努力让 Firestore 在我的本地 PC 上运行,看看数据库是否适用于我的应用程序,那就太好了。

谢谢!

如果设置了环境变量,则方法 2 有效。在以下更改 localhost:8080 到使用 firebase emulators:start

启动模拟器时显示的 Firestore 服务器地址
import os
os.environ['FIRESTORE_EMULATOR_HOST'] = 'localhost:8080'

我不知道如何使用 firebase_admin Python 包使其与上面的方法 1 一起使用。也许其他人知道。

另请注意,当服务器关闭时,模拟的 Firestore 数据库将丢弃其所有数据。要持久化和重用数据,请使用如下命令启动模拟器:

firebase emulators:start --import=./emulator_data --export-on-exit