Supabase
@mastra/auth-supabase 套件使用 Supabase Auth 為 Mastra 提供身分驗證。它會使用 Supabase 的驗證系統確認傳入請求,並透過 auth 選項與 Mastra 伺服器整合。
先決條件「先決條件」的直接連結
此範例使用 Supabase Auth。請務必將 Supabase 認證資訊新增至 .env 檔案,並確認 Supabase 專案已正確設定。
.env
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_ANON_KEY=your-anon-key
備註
請檢查 Supabase 資料列層級安全性(RLS)設定,確保資料存取控制正確無誤。
安裝「安裝」的直接連結
使用 MastraAuthSupabase 類別前,必須先安裝 @mastra/auth-supabase 套件。
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/auth-supabase@latest
pnpm add @mastra/auth-supabase@latest
yarn add @mastra/auth-supabase@latest
bun add @mastra/auth-supabase@latest
使用範例「使用範例」的直接連結
src/mastra/index.ts
import { Mastra } from '@mastra/core'
import { MastraAuthSupabase } from '@mastra/auth-supabase'
export const mastra = new Mastra({
server: {
auth: new MastraAuthSupabase({
url: process.env.SUPABASE_URL,
anonKey: process.env.SUPABASE_ANON_KEY,
}),
},
})
資訊
預設的 authorizeUser 方法會檢查 public 結構描述之 users 資料表中的 isAdmin 欄位。若要自訂使用者授權,請在建構 Provider 時提供自訂的 authorizeUser 函式。
如需所有可用設定選項,請參閱 MastraAuthSupabase。
用戶端設定「用戶端設定」的直接連結
使用 Supabase 驗證時,你需要在用戶端從 Supabase 取得存取權杖,並將其傳遞給 Mastra 請求。
取得存取權杖「取得存取權杖」的直接連結
使用 Supabase 用戶端驗證使用者並取得其存取權杖:
lib/auth.ts
import { createClient } from '@supabase/supabase-js'
const supabase = createClient('<supabase-url>', '<supabase-key>')
const authTokenResponse = await supabase.auth.signInWithPassword({
email: "<user's email>",
password: "<user's password>",
})
const accessToken = authTokenResponse.data?.session?.access_token
備註
如需 OAuth、魔法連結及其他驗證方法,請參閱 Supabase 文件。
設定 MastraClient「configuring-mastraclient」的直接連結
啟用 auth 後,透過 MastraClient 發出的所有請求都必須在 Authorization 標頭中包含有效的 Supabase 存取權杖:
lib/mastra/mastra-client.ts
import { MastraClient } from '@mastra/client-js'
export const mastraClient = new MastraClient({
baseUrl: 'https://<mastra-api-url>',
headers: {
Authorization: `Bearer ${accessToken}`,
},
})
資訊
存取權杖在 Authorization 標頭中必須加上 Bearer 前綴。
如需更多設定選項,請參閱 Mastra Client SDK。
發出已驗證的請求「發出已驗證的請求」的直接連結
使用 Supabase 存取權杖設定 MastraClient 後,你就可以傳送已驗證的請求:
- React
- cURL
src/components/test-agent.tsx
import { mastraClient } from '../../lib/mastra-client'
export const TestAgent = () => {
async function handleClick() {
const agent = mastraClient.getAgent('weatherAgent')
const response = await agent.generate("What's the weather like in New York")
console.log(response)
}
return <button onClick={handleClick}>Test Agent</button>
}
curl -X POST http://localhost:4111/api/agents/weatherAgent/generate \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your-supabase-access-token>" \
-d '{
"messages": "Weather in London"
}'