Rails(devise)のユーザーを Firebase Authentication にエクスポートする
はじめに
Rails(devise)のユーザーを Firebase Authentication にエクスポートする方法。
TL;DR
- Firebase CLI の
firebase auth:import
でインポート- インポート可能なフォーマットは CSV か JSON
- 以下ページを参考に JSON ファイルを生成
firebase auth:import users.json --hash-algo=BCRYPT --hash-key="xxxx"
でインポート実行- 認証できるかどうかサンプルアプリを作成して検証
目次
環境・条件
1 | # Rails 環境 |
詳細
参考:
- Migrate Rails Devise Users to Firebase Authentication | by Matthias Orgler | Medium
- auth:import と auth:export | Firebase
公式ドキュメント に記載されている通り、Firebase CLI を使うことで Firebase auth へのユーザーインポートが可能。
なので devise で登録されているユーザー情報を、Firebase auth でインポート可能な形式(CSV or JSON)で出力して、firebase auth:import
コマンドでインポートすれば OK。
環境設定
firebase CLI が入ってなければセットアップ。自分は Mac なので brew
でインストールした。
1 | $ brew install firebase |
firebase にログイン、ブラウザが開くのでブラウザ上で操作する。
1 | $ firebase login |
firebase init
で初期化、どの機能を使うか聞かれるので最低限どれか 1つは選択して進めていく。Web conosle でプロジェクト作成済みであれば、プロジェクト選択もできる。
1 | $ firebase init |
インポート用ファイルの作成
参考: auth:import と auth:export | Firebase
CSV 形式、JSON 形式でインポートができる。今回は参考ページにならって JSON とした。
元記事では rake タスクを作ったと書かれているが、今回は技術調査が目的だったので rails c
で作業した。
1 | # rails c でコンソール接続 |
tmp/users.json
として以下のようなファイルができるはず。(見やすいように改行している)
1 | { |
インポート
以下コマンドでインポートできる、--debug
を付けると詳細情報が表示される。上手くいけば ✔ Imported successfully.
となるはず。
1 | $ firebase auth:import users.json --debug --hash-algo=BCRYPT --hash-key="xxxx" |
--hash-key
は rails c
上で Devise.secret_key
で確認できる。
1 | Devise.secret_key |
元記事 では --rounds
を指定しているが、ドキュメントを見る限り BCRYPT
に関係なさそうなので自分は削除した。
パスワードのハッシュに使用されるラウンド数。
SCRYPT、MD5、SHA512、SHA256、SHA1、PBKDF_SHA1、PBKDF2_SHA256 のアルゴリズムに必要です。
認証可能か確認
参考:
探した限り、簡単に認証テストができるツールやらサンドボックスやらは無いようなので、アプリを追加して検証する。
test.html
を作成して、スクリプトを貼り付け。firebase-auth.js
を追加で記述する必要があるので注意。
auth().signInWithEmailAndPassword()
でログインできるか検証。
1 |
|
test.html
をブラウザで開いて signin success
と表示されれば問題なし。
その他・メモ
ID について
Firebase の uid
は alphanumeric(20) らしい(参考: 【Firestore】ドキュメントの自動生成 ID って被らないの? - Qiita)ので、合わせるなら SecureRandom.alphanumeric
で生成。
1 | require 'securerandom' # rails の場合は require 不要 |
ただし、衝突しないとは限らないので既存データを確認する処理も追加する必要があるため注意。
まとめ
- Firebase CLI の
firebase auth:import
でインポート- インポート可能なフォーマットは CSV か JSON
- 以下ページを参考に JSON ファイルを生成
firebase auth:import users.json --hash-algo=BCRYPT --hash-key="xxxx"
でインポート実行- 認証できるかどうかサンプルアプリを作成して検証
参考文献
- Migrate Rails Devise Users to Firebase Authentication | by Matthias Orgler | Medium
- Firebase CLI
- auth:import と auth:export | Firebase
- Firebase を JavaScript プロジェクトに追加する
- JavaScript でパスワード ベースのアカウントを使用して Firebase 認証を行う
関連記事
- Rails で Devise と論理削除を両立する方法
- モバイルアプリの強制アップデートに関する調査メモとアイデア
- Vue + Cordova + Firebase でプッシュ通知
- Node.js で firebase-admin を使ってサーバからプッシュ通知
- Rails で既存の DB を利用するアプリケーションの作成方法(DB 参照のみ)
- Firebase Authentication の認証 UI をローカライズ(日本語化)
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア