firebase-auth-internal-app について
firebase-auth-internal-appは、社内アプリにFirebase Authenticationを組み込むための実装ガイドです。ドメイン制限、Custom Claimsへの権限同期、Firestoreセキュリティルールを扱い、環境固有の設定を実装前に確認します。
主な機能
- 01Firebase Authenticationのサインイン設定
- 02ブロッキング関数によるメールドメイン制限
- 03ユーザー権限のCustom Claimsへの同期
- 04Firestoreセキュリティルールの設定
- 05ドメイン、フィールド、ロール設定の確認
活用シーン
- 01指定したメールドメインからの登録に限定
- 02ユーザードキュメントの変更に応じたトークン権限の更新
- 03usersコレクションへのロールベースアクセス規則の設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ tanabee/ skills --skill firebase-auth-internal-appインストール後、Claude Code で/firebase-auth-internal-appを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/blocking_functions.mdcustom_claims.mdsecurity_rules.md詳細
Firebase Authentication を内部アプリケーションに統合します。以下のコンポーネントを実装してください。
前提条件
- Firebase プロジェクトが作成されている
- Firebase CLI がインストールされ、ログイン済みである
- Firestore が有効になっている
firebase-auth-basicsスキルが利用可能である
実装
1. 認証のセットアップ
firebase-auth-basics スキルに従って、次の作業を行います。
- AskUserQuestion を使用して、ユーザーに使用する認証方法を尋ねます
- 選択された認証方法を設定します(
firebase.jsonの設定、または Firebase Console からの手動セットアップ) - クライアント側の認証を実装します(初期化、サインイン、認証状態の監視、サインアウト)
すべての認証方法の選択肢、設定手順、クライアント SDK の実装例については、firebase-auth-basics を参照してください。
Web 以外のプラットフォーム(iOS/Android/Flutter/Unity など)では、公式ドキュメント https://firebase.google.com/docs/auth から該当するプラットフォームの情報を取得してください。
2. Blocking Functions によるドメイン制限
references/blocking_functions.md に基づいて実装します。
beforeUserCreated を使用して、次の処理を実装します。
- ユーザーのメールアドレスからドメインを判定します
- ドメインが許可されている場合、ユーザー情報を Firestore の
usersコレクションに登録します - ドメインが許可されていない場合、エラーを返してサインインを拒否します
- 戻り値(
return { customClaims: ... })を使用して Custom Claims に初期roleを設定し、初回サインイン時から ID トークンに含まれるようにします
AskUserQuestion を使用して、許可するメールドメイン(例:example.com)をユーザーに尋ねます。複数のドメインがある場合は、カンマ区切りで入力するよう尋ねてください。
また、次の内容を確認してください。
usersコレクションに保存するフィールド(デフォルト:email、role、createdAt)
3. Custom Claims による権限管理
references/custom_claims.md に基づいて実装します。
onDocumentWritten を使用して users/{id} ドキュメントの変更を監視し、権限情報を Custom Claims と同期します。
- 初期 Claims は
beforeUserCreatedの戻り値(セクション 2)で設定されます。このトリガーでは以降の更新のみを処理します usersドキュメントの権限フィールドが更新されたら、setCustomUserClaimsを使用して ID トークンに反映します- クライアント側では、トークン内の Custom Claims を権限制御に使用できます
デフォルトの role 値:
admin:管理者user:一般ユーザーpending:承認待ちdeleted:削除済み
ドメイン制限を通過したユーザーの初期 role は user です。次の内容をユーザーに確認してください。
- Custom Claims に保存する権限フィールド名(デフォルト:
role) roleの種類をカスタマイズするかどうか(デフォルト:admin、user、pending、deleted)
4. Firestore セキュリティルール
references/security_rules.md に基づいて実装します。
role Custom Claim に基づいてヘルパー関数 isUser() と isAdmin() を定義し、最低限 users コレクションのセキュリティルールを設定します。
アプリケーション内の他のコレクションでも、アクセス制御に isUser() と isAdmin() を使用してください。
注意事項
- 前提条件が満たされていない場合は、作業を進める前に不足している項目をユーザーに伝えてください
- 許可するドメインやアプリ名など、環境固有の値を設定する前に必ずユーザーに確認してください
- Blocking Functions は Cloud Functions for Firebase(第 2 世代)を使用します
usersコレクションへの書き込みにはfirebase-adminSDK(サーバー側)を使用します