> Discover all available pages from the documentation index: https://mastra.zisheng.pro/llms.txt # 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**: ```bash npm install @mastra/auth-clerk@latest ``` **pnpm**: ```bash pnpm add @mastra/auth-clerk@latest ``` **Yarn**: ```bash yarn add @mastra/auth-clerk@latest ``` **Bun**: ```bash bun add @mastra/auth-clerk@latest ``` ## 用法示例 ```typescript 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](https://mastra.zisheng.pro/reference/auth/clerk)。 ## 客户端设置 使用 Clerk 身份验证时,需要在客户端从 Clerk 获取访问令牌,并将其传递给 Mastra 请求。 ### 获取访问令牌 使用 Clerk React hooks 对用户进行身份验证并获取其访问令牌: ```typescript import { useAuth } from '@clerk/nextjs' export const useClerkAuth = () => { const { getToken } = useAuth() const getAccessToken = async () => { const token = await getToken() return token } return { getAccessToken } } ``` 有关更多信息,请参阅 [Clerk 文档](https://clerk.com/docs)。 ## 配置 `MastraClient` 启用 `auth` 后,使用 `MastraClient` 发出的所有请求都必须在 `Authorization` 标头中包含有效的 Clerk 访问令牌: ```typescript import { MastraClient } from '@mastra/client-js' export const mastraClient = new MastraClient({ baseUrl: 'https://', headers: { Authorization: `Bearer ${accessToken}`, }, }) ``` > **信息:** 访问令牌在 Authorization 标头中必须带有 `Bearer` 前缀。 > > 有关更多配置选项,请参阅 [Mastra Client SDK](https://mastra.zisheng.pro/docs/server/mastra-client)。 ### 发出经过身份验证的请求 使用 Clerk 访问令牌配置 `MastraClient` 后,即可发送经过身份验证的请求: **React**: ```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 } ``` **cURL**: ```bash curl -X POST http://localhost:4111/api/agents/weatherAgent/generate \ -H "Content-Type: application/json" \ -H "Authorization: Bearer " \ -d '{ "messages": "Weather in London" }' ```