MastraAuthFirebase クラス
MastraAuthFirebase
クラスは、Firebase Authentication を利用して Mastra の認証を提供します。Firebase の ID トークンで受信リクエストを検証し、experimental_auth
オプションを介して Mastra サーバーと統合します。
前提条件
この例では Firebase Authentication を使用します。次の点を確認してください:
- Firebase Console で Firebase プロジェクトを作成する
- Authentication を有効にし、希望するサインイン方法(Google、Email/Password など)を設定する
- Project Settings > Service Accounts からサービスアカウントキーを生成する
- サービスアカウントの JSON ファイルをダウンロードする
FIREBASE_SERVICE_ACCOUNT=/path/to/your/service-account-key.json
FIRESTORE_DATABASE_ID=(default)
# Alternative environment variable names:
# FIREBASE_DATABASE_ID=(default)
注意: サービスアカウントの JSON ファイルは安全に保管し、バージョン管理にコミットしないでください。
インストール
MastraAuthFirebase
クラスを使用する前に、@mastra/auth-firebase
パッケージをインストールしてください。
npm install @mastra/auth-firebase@latest
使用例
環境変数を使った基本的な利用方法
必要な環境変数(FIREBASE_SERVICE_ACCOUNT
と FIRESTORE_DATABASE_ID
)を設定すれば、MastraAuthFirebase
はコンストラクタ引数なしで初期化できます。クラスはこれらの環境変数を設定として自動的に読み込みます。
import { Mastra } from "@mastra/core/mastra";
import { MastraAuthFirebase } from '@mastra/auth-firebase';
// FIREBASE_SERVICE_ACCOUNT と FIRESTORE_DATABASE_ID の環境変数を自動的に利用します
export const mastra = new Mastra({
// ..
server: {
experimental_auth: new MastraAuthFirebase(),
},
});
カスタム設定
import { Mastra } from "@mastra/core/mastra";
import { MastraAuthFirebase } from '@mastra/auth-firebase';
export const mastra = new Mastra({
// ..
server: {
experimental_auth: new MastraAuthFirebase({
serviceAccount: '/path/to/service-account.json',
databaseId: 'your-database-id'
}),
},
});
設定
MastraAuthFirebase
クラスは、コンストラクターのオプションまたは環境変数で構成できます。
環境変数
FIREBASE_SERVICE_ACCOUNT
: Firebase サービス アカウントの JSON ファイルへのパスFIRESTORE_DATABASE_ID
またはFIREBASE_DATABASE_ID
: Firestore のデータベース ID
注意: コンストラクターのオプションが指定されていない場合、クラスは自動的にこれらの環境変数を参照します。つまり、環境変数が適切に設定されていれば、引数なしで
new MastraAuthFirebase()
を呼び出すだけで問題ありません。
ユーザー認可
デフォルトでは、MastraAuthFirebase
は Firestore を使用してユーザーのアクセスを管理します。user_access
というコレクションがあり、各ドキュメントのキーはユーザーの UID であることを前提としています。このコレクションに該当ユーザーのドキュメントが存在するかどうかで、そのユーザーが認可済みかが判定されます。
user_access/
{user_uid_1}/ // Document exists = user authorized
{user_uid_2}/ // Document exists = user authorized
ユーザー認可をカスタマイズするには、独自の authorizeUser
関数を指定します:
import { MastraAuthFirebase } from '@mastra/auth-firebase';
const firebaseAuth = new MastraAuthFirebase({
authorizeUser: async (user) => {
// カスタム認可ロジック
return user.email?.endsWith('@yourcompany.com') || false;
}
});
利用可能な設定オプションの詳細は、MastraAuthFirebase の API リファレンスをご覧ください。
クライアント側のセットアップ
Firebase 認証を利用する場合は、クライアント側で Firebase を初期化し、ユーザーを認証して、Mastra に送るリクエストに添えるための ID トークンを取得する必要があります。
クライアントでの Firebase のセットアップ
まず、クライアントアプリケーションで Firebase を初期化します。
import { initializeApp } from 'firebase/app';
import { getAuth, GoogleAuthProvider } from 'firebase/auth';
const firebaseConfig = {
apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY,
authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN,
projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
};
const app = initializeApp(firebaseConfig);
export const auth = getAuth(app);
export const googleProvider = new GoogleAuthProvider();
ユーザーの認証とトークンの取得
Firebase Authentication を使用してユーザーにサインインし、ID トークンを取得します。
import { signInWithPopup, signOut, User } from 'firebase/auth';
import { auth, googleProvider } from './firebase';
export const signInWithGoogle = async () => {
try {
const result = await signInWithPopup(auth, googleProvider);
return result.user;
} catch (error) {
console.error('Error signing in:', error);
throw error;
}
};
export const getIdToken = async (user: User) => {
try {
const idToken = await user.getIdToken();
return idToken;
} catch (error) {
console.error('Error getting ID token:', error);
throw error;
}
};
export const signOutUser = async () => {
try {
await signOut(auth);
} catch (error) {
console.error('Error signing out:', error);
throw error;
}
};
メール/パスワード認証、電話認証など、その他の認証方法については Firebase ドキュメント を参照してください。
MastraClient
の設定
experimental_auth
が有効な場合、MastraClient
で行うすべてのリクエストには、Authorization
ヘッダーに有効な Firebase ID トークンを含める必要があります。
import { MastraClient } from "@mastra/client-js";
export const createMastraClient = (idToken: string) => {
return new MastraClient({
baseUrl: "https://<mastra-api-url>",
headers: {
Authorization: `Bearer ${idToken}`
}
});
};
注: ID トークンは
Authorization
ヘッダーでBearer
を付与して指定する必要があります。
そのほかの設定項目については、Mastra Client SDK を参照してください。
認証済みリクエストの送信
MastraClient
に Firebase の ID トークンを設定したら、認証済みリクエストを送信できます。
"use client";
import { useAuthState } from 'react-firebase-hooks/auth';
import { MastraClient } from "@mastra/client-js";
import { auth } from '../lib/firebase';
import { getIdToken } from '../lib/auth';
export const TestAgent = () => {
const [user] = useAuthState(auth);
async function handleClick() {
if (!user) return;
const token = await getIdToken(user);
const client = createMastraClient(token);
const weatherAgent = client.getAgent("weatherAgent");
const response = await weatherAgent.generate({
messages: "What's the weather like in New York",
});
console.log({ response });
}
return (
<button onClick={handleClick} disabled={!user}>
Test Agent
</button>
);
};