LoginSignup
0

More than 1 year has passed since last update.

FlaskでFirebase AuthとFirestoreを同時に使いたい時にしたこと

Last updated at Posted at 2022-06-06

概要

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()

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0