Firebaseアカウントユーザーを一括でCSVエクスポートする方法
現時点(2019年5月時点)でFirebase プロジェクトから一括でCSVにユーザーをエクスポートするにはFirebase CLIを使う必要があります。この記事ではその方法をご紹介します。
前回の記事「FirebaseにユーザーをCSVインポートする方法 」では簡易的なアプリケーションを作ってユーザーをCSVインポートする方法をご紹介しました。インポートが出来るのであれば当然エクスポートも出来るはずだと考えるのが自然だと思います。
私もそう思ったんですけど、本当にFirebase CLIを使う他ないみたいです・・
上記の記事で利用していたFirebase Admin SDKのドキュメント を読んでみても、メソッド一覧の中に「importUsers」はあって「exportUsers」が存在しません。これから追加予定なのかは分かりかねますが、現状Firebase Admin SDKを使ってユーザーエクスポートは出来ない模様です。
1. 準備
公式が出しているFirebase CLIを使ってCSV形式でユーザーデータをエクスポートします。
- Firebase CLI
*要npm
npmをインストールしたら、コンソールで以下を入力してください。
2.Firebase CLIを使ったユーザーデータのエクスポートの流れ
1. ターミナルで、firebase loginと入力する
2. そうすると、chromeが開くか、ログイン画面のURLがターミナルに表示される
3. Firebaseプロジェクト権限があるGoogleアカウントにログインする
4. コンソールで以下を入力
firebase auth:export -P [firebase プロジェクトID] user.csv
パラメータの詳しい内容はこちら
なお、公式ドキュメントには以下の記載があります:
注: auth:export コマンドは、Firebase のバックエンドで使用される scrypt アルゴリズムを使用してハッシュされたパスワードだけをエクスポートします。アカウント レコードのパスワード ハッシュが他のアルゴリズムで生成されたものである場合は、passwordHash フィールドと salt フィールドが空の状態でエクスポートされます。インポートされたユーザーが最初にログインするときにならなければ scrypt でのパスワード ハッシュ再生成は行われません。このため、ファイルからユーザー レコードをインポートした時点では、他のアルゴリズムで生成されたパスワード ハッシュがプロジェクトに存在する可能性があります。
仮にデータベースをFirebaseに移行していたとして、インポートしたユーザーのパスワードハッシュがscryptアルゴリズムじゃない場合はインポートされたユーザーが最初にログインするまで、scryptでのパスワードハッシュが再生成されないため、エクスポートされるCSVまたはJSONではpasswordHashフィールドとsaltフィールドが空白の状態でエクスポートされるためご注意ください。
5. 現在居るディレクトリにユーザーデータのcsvがエクスポートされる
6. コンソールで以下を入力
おまけ:プロジェクトIDが分かってれば誰でもエクスポート出来るのか?
試した結果、Firebase プロジェクトの「プロジェクトの設定」>「ユーザーと権限」で権限を付与されているメールアカウントでしかエクスポート出来ませんでした。以下エラー文:
Error: Authorization failed. This account is missing the following required permissions on project :
firebase.projects.get
firebaseauth.users.get
ですので、例え第三者がfirebase cliにhogehoge@gmail.comでログインし、あなたのFirebaseプロジェクト IDを使ってauth: exportやimportしようとしても、ユーザー権限が無いため、エラーとなります。
ただ、ユーザー権限のあるgmailアカウントが乗っ取られたら、export / import は可能になります。
その可能性がある場合は、Firebaseプロジェクトの管理画面から「ユーザーと権限」へ移動し、該当のアカウントからユーザー権限を外しましょう。
以上、Firebase プロジェクトから一括でCSVにユーザーをエクスポートする方法でした。