Aller au contenu principal

Clerk

Le package @mastra/auth-clerk fournit l'authentification Clerk à Mastra. Il vérifie les requêtes entrantes au moyen du système d'authentification de Clerk et s'intègre au serveur Mastra grâce à l'option auth.

Prérequis
Lien direct vers Prérequis

Cet exemple utilise l'authentification Clerk. Ajoutez vos identifiants Clerk à votre fichier .env et vérifiez que votre projet Clerk est correctement configuré.

.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
remarque

Vous trouverez ces clés dans le tableau de bord Clerk, sous « API Keys ».

Installation
Lien direct vers Installation

Avant d'utiliser la classe MastraAuthClerk, vous devez installer le package @mastra/auth-clerk.

npm install @mastra/auth-clerk@latest

Exemple d'utilisation
Lien direct vers Exemple d'utilisation

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,
}),
},
})
info

La méthode authorizeUser par défaut autorise tous les utilisateurs authentifiés. Pour personnaliser les autorisations, fournissez une fonction authorizeUser personnalisée lors de la création du Provider.

Consultez MastraAuthClerk pour découvrir toutes les options de configuration disponibles.

Configuration côté client
Lien direct vers Configuration côté client

Lorsque vous utilisez l'authentification Clerk, vous devez récupérer le jeton d'accès Clerk côté client et le transmettre dans vos requêtes Mastra.

Récupérer le jeton d'accès
Lien direct vers Récupérer le jeton d'accès

Utilisez les hooks React de Clerk pour authentifier les utilisateurs et récupérer leur jeton d'accès :

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 }
}

Consultez la documentation de Clerk pour plus d'informations.

Configurer MastraClient
Lien direct vers configuring-mastraclient

Lorsque auth est activé, toutes les requêtes effectuées avec MastraClient doivent inclure un jeton d'accès Clerk valide dans l'en-tête Authorization :

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}`,
},
})
info

Le jeton d'accès doit être précédé de Bearer dans l'en-tête Authorization.

Consultez le SDK client Mastra pour davantage d’options de configuration.

Effectuer des requêtes authentifiées
Lien direct vers Effectuer des requêtes authentifiées

Une fois MastraClient configuré avec le jeton d'accès Clerk, vous pouvez envoyer des requêtes authentifiées :

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>
}