Clerk
@mastra/auth-clerk 包使用 Clerk 为 Mastra 提供身份验证。它使用 Clerk 的身份验证系统验证传入请求,并通过 auth 选项与 Mastra 服务器集成。
前置条件前置条件的直接链接
本示例使用 Clerk 身份验证。请务必将 Clerk 凭据添加到 .env 文件,并确保 Clerk 项目已正确配置。
.env
CLERK_PUBLISHABLE_KEY=pk_test_...
CLERK_SECRET_KEY=sk_test_...
CLERK_JWKS_URI=https://your-clerk-domain.clerk.accounts.dev/.well-known/jwks.json
备注
可以在 Clerk Dashboard 的 "API Keys" 下找到这些密钥。
安装安装的直接链接
在使用 MastraAuthClerk 类之前,必须安装 @mastra/auth-clerk 包。
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/auth-clerk@latest
pnpm add @mastra/auth-clerk@latest
yarn add @mastra/auth-clerk@latest
bun add @mastra/auth-clerk@latest
用法示例用法示例的直接链接
src/mastra/index.ts
import { Mastra } from '@mastra/core'
import { MastraAuthClerk } from '@mastra/auth-clerk'
export const mastra = new Mastra({
server: {
auth: new MastraAuthClerk({
publishableKey: process.env.CLERK_PUBLISHABLE_KEY,
secretKey: process.env.CLERK_SECRET_KEY,
jwksUri: process.env.CLERK_JWKS_URI,
}),
},
})
信息
默认 authorizeUser 方法允许所有已通过身份验证的用户。要自定义用户授权,请在构造 Provider 时提供自定义 authorizeUser 函数。
有关所有可用的配置选项,请参阅 MastraAuthClerk。
客户端设置客户端设置的直接链接
使用 Clerk 身份验证时,需要在客户端从 Clerk 获取访问令牌,并将其传递给 Mastra 请求。
获取访问令牌获取访问令牌的直接链接
使用 Clerk React hooks 对用户进行身份验证并获取其访问令牌:
lib/auth.ts
import { useAuth } from '@clerk/nextjs'
export const useClerkAuth = () => {
const { getToken } = useAuth()
const getAccessToken = async () => {
const token = await getToken()
return token
}
return { getAccessToken }
}
有关更多信息,请参阅 Clerk 文档。
配置 MastraClientconfiguring-mastraclient的直接链接
启用 auth 后,使用 MastraClient 发出的所有请求都必须在 Authorization 标头中包含有效的 Clerk 访问令牌:
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。
发出经过身份验证的请求发出经过身份验证的请求的直接链接
使用 Clerk 访问令牌配置 MastraClient 后,即可发送经过身份验证的请求:
- React
- cURL
src/components/test-agent.tsx
'use client'
import { useAuth } from '@clerk/nextjs'
import { MastraClient } from '@mastra/client-js'
export const TestAgent = () => {
const { getToken } = useAuth()
async function handleClick() {
const token = await getToken()
const client = new MastraClient({
baseUrl: 'http://localhost:4111',
headers: token ? { Authorization: `Bearer ${token}` } : undefined,
})
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}>Test Agent</button>
}
curl -X POST http://localhost:4111/api/agents/weatherAgent/generate \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your-clerk-access-token>" \
-d '{
"messages": "Weather in London"
}'