Firebase
@mastra/auth-firebase パッケージは、Firebase Authentication を使用した Mastra の認証を提供します。Firebase ID トークンを使って受信リクエストを検証し、auth オプションで Mastra サーバーと統合します。
前提条件前提条件への直接リンク
この例では Firebase Authentication を使用します。次の準備を行ってください。
- Firebase Console で Firebase プロジェクトを作成する
- Authentication を有効にし、使用するログイン方法(Google、メールアドレスとパスワードなど)を設定する
- 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
- pnpm
- Yarn
- Bun
npm install @mastra/auth-firebase@latest
pnpm add @mastra/auth-firebase@latest
yarn add @mastra/auth-firebase@latest
bun add @mastra/auth-firebase@latest
使用例使用例への直接リンク
環境変数を使用する基本的な構成環境変数を使用する基本的な構成への直接リンク
必要な環境変数(FIREBASE_SERVICE_ACCOUNT と FIRESTORE_DATABASE_ID)を設定すると、コンストラクター引数なしで MastraAuthFirebase を初期化できます。クラスはこれらの環境変数を設定として自動的に読み込みます。
import { Mastra } from '@mastra/core'
import { MastraAuthFirebase } from '@mastra/auth-firebase'
// Automatically uses FIREBASE_SERVICE_ACCOUNT and FIRESTORE_DATABASE_ID env vars
export const mastra = new Mastra({
server: {
auth: new MastraAuthFirebase(),
},
})
カスタム設定カスタム設定への直接リンク
import { Mastra } from '@mastra/core'
import { MastraAuthFirebase } from '@mastra/auth-firebase'
export const mastra = new Mastra({
server: {
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 を使用してユーザーアクセスを管理します。ユーザー UID をキーとするドキュメントを格納した user_access コレクションを前提としています。このコレクションにドキュメントが存在するかどうかで、ユーザーが認可されているかを判定します。
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 => {
// Custom authorization logic
return user.email?.endsWith('@yourcompany.com') || false
},
})
利用可能なすべての設定オプションについては、MastraAuthFirebase を参照してください。
クライアント側の設定クライアント側の設定への直接リンク
Firebase 認証を使用する場合は、クライアント側で Firebase を初期化してユーザーを認証し、ID トークンを取得して Mastra へのリクエストに渡す必要があります。
クライアントでの Firebase の設定クライアントでの 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 の設定configuring-mastraclientへの直接リンク
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}`,
},
})
}
Authorization ヘッダーでは、ID トークンに Bearer プレフィックスを付ける必要があります。
その他の設定オプションについては、Mastra Client SDK を参照してください。
認証済みリクエストの送信認証済みリクエストの送信への直接リンク
Firebase ID トークンを使って MastraClient を設定すると、認証済みリクエストを送信できます。
- React
- Node.js
- cURL
'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("What's the weather like in New York")
console.log({ response })
}
return (
<button onClick={handleClick} disabled={!user}>
Test Agent
</button>
)
}
const express = require('express')
const admin = require('firebase-admin')
const { MastraClient } = require('@mastra/client-js')
// Initialize Firebase Admin
admin.initializeApp({
credential: admin.credential.cert({
// Your service account credentials
}),
})
const app = express()
app.use(express.json())
app.post('/generate', async (req, res) => {
try {
const { idToken } = req.body
// Verify the token
await admin.auth().verifyIdToken(idToken)
const mastra = new MastraClient({
baseUrl: 'http://localhost:4111',
headers: {
Authorization: `Bearer ${idToken}`,
},
})
const weatherAgent = mastra.getAgent('weatherAgent')
const response = await weatherAgent.generate("What's the weather like in Nairobi")
res.json({ response: response.text })
} catch (error) {
res.status(401).json({ error: 'Unauthorized' })
}
})
curl -X POST http://localhost:4111/api/agents/weatherAgent/generate \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your-firebase-id-token>" \
-d '{
"messages": "Weather in London"
}'