表題の通り、Firebase Authentication のデータを別プロジェクトにコピーしたい状況が起こったので、それを行うためのスクリプトを書いた。

copy_firebase_auth.sh

使い方

  1. Firebase CLI でコピー元、コピー先それぞれのプロジェクトにログインする
  2. Firebase の Web コンソール上でコピー元ハッシュパラメータをコピーし、スクリプトと同じディレクトリに .hashParameter として保存する
  3. 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,
}


  1. auth:import と auth:export  |  Firebase ↩︎ ↩︎