【问题标题】:Is credential necessary when running Firebase Admin with Firebase Emulator?使用 Firebase 模拟器运行 Firebase Admin 时是否需要凭据?
【发布时间】:2021-12-03 07:24:27
【问题描述】:

我通过功能框架在 python 上运行 Firebase Admin SDK,Firebase 模拟器设置在不同的终端上,我有一个问题。

虽然这适用于 shell(zsh)...:

# python
import firebase_admin
from firebase_admin import auth as admin_auth, firestore as admin_firestore, credentials

app_options = {'projectId': 'dev-some-project'}
firebase_admin.initialize_app(options=app_options)
db = admin_firestore.client()


def change_order_state(request):
    return 123

# shell
FIRESTORE_EMULATOR_HOST=localhost:8080 \
FIREBASE_AUTH_EMULATOR_HOST=localhost:9099 \
GOOGLE_APPLICATION_CREDENTIALS=./path_to_credential.json \
functions_framework --target=change_order_state --port=1234

但是,如果没有 GOOGLE_APPLICATION_CREDENTIALS,这在 shell 上不起作用:

FIRESTORE_EMULATOR_HOST=localhost:8080 \
FIREBASE_AUTH_EMULATOR_HOST=localhost:9099 \

functions_framework --target=change_order_state --port=1234

错误日志说:

google.auth.exceptions.DefaultCredentialsError:
Could not automatically determine credentials.
Please set GOOGLE_APPLICATION_CREDENTIALS or 
explicitly create credentials and re-run the application. 

是否能够在不设置GOOGLE_APPLICATION_CREDENTIALS 的情况下使用 Firebase 模拟器运行 Firebase Admin?在模拟器上运行时,我没有看到设置凭据的必要性。

或者任何其他解决方案都可以。我看到了this article,这个解决方案是可以的,只要它可以用Python编写。

我不想设置GOOGLE_APPLICATION_CREDENTIALS 的原因是我不想将凭据文件分发给所有开发人员,这对于初始开发阶段来说太重了。

[可选] ...如果没有凭据就无法运行,那么在使用模拟器在本地机器上运行 Firebase Admin SDK 时,给予开发人员的最低 GCP 角色是什么。 Firebase 管理员角色对我来说似乎太强大了。

谢谢!

【问题讨论】:

  • 为什么需要带有 Firebase 模拟器的函数框架?模拟器将运行您的函数代码以响应触发事件,并且该事件可以通过简单的 HTTP 调用发生。 Functions framework 用于在没有 firebase-function 库和 CLI 的情况下对 Cloud Functions 代码进行独立的本地测试。
  • 谢谢。我需要用 python 运行一些函数。 Firebase 函数无法处理 python。这就是我使用函数框架的原因。
  • 然后您可能希望显示未按您期望的方式工作的代码,以便我们可以看到您正在尝试做什么。那部分可能是错误的,我们无法判断。
  • 谢谢我添加了你指出的代码。

标签: firebase firebase-admin firebase-cli firebase-tools functions-framework


【解决方案1】:

是的,一些凭据是必需的,因为它会查找凭据并应用 DefaultCredentials 函数,并且您得到 DefaultCredentialsError。

但你可以使用 AnonymousCredentials

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

client = firestore.Client(credentials=credentials.AnonymousCredentials())

【讨论】:

    猜你喜欢
    • 2019-09-27
    • 2021-10-13
    • 2020-03-09
    • 2021-09-09
    • 2021-06-21
    • 2021-12-04
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    相关资源
    最近更新 更多