表題の通り、Firebase Authentication のデータを別プロジェクトにコピーしたい状況が起こったので、それを行うためのスクリプトを書いた。
使い方
- Firebase CLI でコピー元、コピー先それぞれのプロジェクトにログインする
- Firebase の Web コンソール上でコピー元のハッシュパラメータをコピーし、スクリプトと同じディレクトリに
.hashParameter
として保存する PROJECT_FROM={コピー元プロジェクトID} PROJECT_TO={コピー先プロジェクトID} copy_firebase_auth.sh
を実行する
解説
基本的にやっていることは単純で、Firebase のCLI にはユーザーのデータをディスク上に書き出す firebase auth:export
と、書き出されたファイルから Authentication にデータを読み込む firebase auth:import
が含まれている [1] のでこれらを使ってデータをエクスポート/インポートするだけだ。
ただし、インポートする際にコンソールから取得できるハッシュパラメーターを指定しておかないとパスワード認証のユーザーを読み込めない [1:1]。加えて、OAuth 認証されたユーザーについても、一見読み込めたように見えても、既存のユーザーがコピー先プロジェクト上で認証した際に、新規ユーザーとして扱われてしまい、データの移行が困難になってしまう。
スクリプトの実行時にハッシュパラメータを一つずつコピペするのは面倒なので、パラメーターをスクリプトと同じディレクトリに .hashParameter
として配置しておけばパラメーターを自動で設定し、適切にインポートできるようにした。コンソール上でパラメーターを表示すると JSON のようで JSON ではない形式 (以下の形式)で表示されるが、これをそのまま上記のファイル名で保存すれば問題ない。
ハッシュパラメータの例 ↓
hash_config {
algorithm: SCRYPT,
base64_signer_key: ...,
base64_salt_separator: ...,
rounds: 8,
mem_cost: 14,
}