概要
firebase-adminをFlaskプロジェクト内で使っていた。
Firebase AuthもFirestoreも使いたかったので、同プロジェクト内でファイルごとにfirebase_admin.initialize_app(cred)
したら、以下のようなエラーが出た。
ValueError: The default Firebase app already exists. This means you called initialize_app() more than once without providing an app name as the second argument. In most cases you only need to call initialize_app() once. But if you do want to initialize multiple apps, pass a second argument to initialize_app() to give each app a unique name.
よくない解決法
既にinitialize済だ!と怒られたので、単純にFirestoreの方のinitialize_appを消してみた。
ValueError: The default Firebase app does not exist. Make sure to initialize the SDK by calling initialize_app().
今度は存在しなくなってしまった。
逆に、Authにあるinitializeを消すと動くのだが、よくない解決法だと感じた。
これは、Firestoreの方が先にimportされているからである。
多分、最適解
classを作ってあげて、firebase_adminを使用するところでそれぞれインスタンスを生成した。
initializeが済んでいなければ実行し、済んでいればしない。
ファイル構成
.
├── auth.py
├── firestore.py
└── config
├── certificate.py
└── serviceAccountKey.json
certificate.py
import firebase_admin
from firebase_admin import credentials
class Initialize():
def __init__(self):
if not firebase_admin._apps:
cred = credentials.Certificate(
"config/serviceAccountKey.json")
firebase_admin.initialize_app(cred)
auth.py, firestore.py
from config import certificate
certificate.Initialize()