概要
ステージング環境で my-project-dev というプロジェクトをFirebase で作っており、
本番環境では my-project-production というプロジェクトを作っているときに、
どうやって環境に従ってFirebaseAuthのサービスアカウントのロード(json)を切り替えようかという話。
解決策
export FIREBASE_CREDENTIAL_JSON=$(cat firebase_dev.json | base64 -w 0)
みたいにして、json を base64で環境変数にぶち込みます。
読み込み方
Node.js
node.js だったら、
import * as admin from "firebase-admin";
import { initializeApp, getApps, cert, applicationDefault } from 'firebase-admin/app';
import { getAuth } from "firebase-admin/auth";
const tmpJson = process.env.FIREBASE_CREDENTIAL_JSON as string;
const decodedFile = Buffer.from(tmpJson, 'base64')
const decodedJson = JSON.parse(decodedFile.toString());
const serviceAccount = decodedJson as admin.ServiceAccount;
みたいにして読み込みます。
Python
Python だったら、
import os
import base64
import re
import uuid
import datetime
import json
from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse
import firebase_admin
from firebase_admin import credentials
tmp = os.getenv("FIREBASE_CREDENTIAL_JSON")
tmp2 = base64.b64decode(tmp.encode())
firebase_dict = json.loads(tmp2)
cred = credentials.Certificate(firebase_dict)
storage_bucket = os.getenv("STORAGE_BUCKET")
firebase_admin.initialize_app(cred, {"storageBucket": storage_bucket})
みたいな感じで読み込みます。
以上。