🔐
firebase webで別プロジェクトのAuthenticationを流用する
概要
firebase authを使ってログインしたとき、同時に別のプロジェクトにも「同じユーザーとして」ログインし、1つのプロジェクトから他のプロジェクトたちにユーザー情報を共有する方法の解説です。
できることとして、「firestore rulesを書くとき、別プロジェクトのAuthenticationに基づいたconditionを書くことができる」などがあります。
つまり、認証用にメインのプロジェクトを用意し、firestoreは用途別のプロジェクトに分散する、といったことが可能になります。
手順
以下の2つのプロジェクトを考えます。
- 「親PJ」: 認証用。ユーザー情報のマスターとなる
- 「子PJ」: 親PJのユーザー情報を継承する。
両プロジェクトで以下のことが済んでいるとします。
- Authenticationが有効化
- Web appの追加 (
firebaseConfig
の取得 )
1. 親PJのOAuth 2.0 Client IDの取得
https://console.cloud.google.com/apis/credentials を開き、親PJを選択した上で、 "Web client"のClient IDをコピーしておきます。
2. 子PJで親PJを信頼する
子PJの設定で、「Authentication > Sign-in method」からGoogleログインを有効化します。
Googleログインの設定項目に「Safelist client IDs from external projects (optional)」があるので、ここにさきほどのClient IDを追加します。
3. Webで親PJと同時に子PJにもログインできるよう実装する
まず通常通り親PJにログインし、その際に返却される認証情報をそのまま用いて、さらに子PJへのログインを行います。
ここでは親PJもGoogleログインを使っています。
firebase.initializeApp(firebaseConfigPrimary)
firebase.initializeApp(firebaseConfigSecondary, 'secondary')
// Sign in to primary project
const provider = new firebase.auth.GoogleAuthProvider()
const signInResult = await firebase.auth().signInWithPopup(provider)
// Sign in to secondary project
const credential = signInResult.credential
await firebase.app('secondary').auth().signInWithCredential(credential)
これによって親PJから子PJに認証情報が継承され、一度のユーザー操作でで両プロジェクトへのログインができるようになります。
感想
PJからPJの信頼まわりでの情報がほとんどなく苦労しました...
これでDBが分割できるので嬉しいですね。
参考
-
Working with multiple Firebase projects in an Android app
- Androidで同様のことを行う内容です。大いに参考にさせていただきました。
Discussion