Firebaseアカウントユーザーを一括でCSVエクスポートする方法

2019年5月18日

現時点(2019年5月時点)でFirebase プロジェクトから一括でCSVにユーザーをエクスポートするにはFirebase CLIを使う必要があります。この記事ではその方法をご紹介します。

前回の記事「FirebaseにユーザーをCSVインポートする方法 では簡易的なアプリケーションを作ってユーザーをCSVインポートする方法をご紹介しました。インポートが出来るのであれば当然エクスポートも出来るはずだと考えるのが自然だと思います。

私もそう思ったんですけど、本当にFirebase CLIを使う他ないみたいです・・

上記の記事で利用していたFirebase Admin SDKのドキュメント を読んでみても、メソッド一覧の中に「importUsers」はあって「exportUsers」が存在しません。これから追加予定なのかは分かりかねますが、現状Firebase Admin SDKを使ってユーザーエクスポートは出来ない模様です。

1. 準備

公式が出しているFirebase CLIを使ってCSV形式でユーザーデータをエクスポートします。

  1. 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にユーザーをエクスポートする方法でした。