【发布时间】:2021-11-24 12:41:18
【问题描述】:
我正在尝试做的是将模拟器连接到 firebase_admin 的一个实例以进行管理员身份验证,并在同一个 api 中将另一个实例连接到 Web 身份验证。
问题是我无法为每个 firebase_admin 实例设置每个模拟器的主机。发生的情况是它总是采用它在模块的最后一个实例中声明的环境变量。从下面的python脚本中可以看出。
#!/usr/bin/env python3
"""
src.firebase.py
Initialize firebase_admin for admin & web
"""
import os
from firebase_admin import initialize_app
from firebase_admin import credentials
from firebase_admin import auth
def initialize_admin():
os.environ["FIREBASE_AUTH_EMULATOR_HOST"] = os.getenv("FIREBASE_AUTH_EMULATOR_ADMIN_HOST")
sdk_cred = credentials.Certificate(
os.path.abspath(
os.path.join(__package__, "./config/conexperto-admin-sdk.json")
)
)
return initialize_app(
credential=sdk_cred, name="admin"
)
def initialize_web():
os.environ["FIREBASE_AUTH_EMULATOR_HOST"] = os.getenv("FIREBASE_AUTH_EMULATOR_WEB_HOST")
sdk_cred = credentials.Certificate(
os.path.abspath(
os.path.join(__package__, "./config/conexperto-web-sdk.json")
)
)
return initialize_app(
credential=sdk_cred, name="web"
)
admin_sdk = initialize_admin()
web_sdk = initialize_web()
user_admin = auth.get_user(uid, app=admin_sdk) # in this instance admin_sdk is linked to the emulator web, what causes the error
web_admin = auth.get_user(uid, app=web_sdk)
因此,在创建管理员用户时,会使用 admin_sdk 的凭据对其进行签名并保存在 Web 模拟器中。当使用所述用户登录并验证令牌时,它会抛出签名错误'aud'。
我正在使用的 firebase_admin 版本
firebase_admin-5.0.1
【问题讨论】:
标签: python firebase api firebase-authentication firebase-admin