app/, Next.js 13+) als auch der Pages Router (pages/api/, Next.js 12 und älter) werden unten abgedeckt.
Einrichtung der Umgebung
Füge dein Secret zu.env.local hinzu. Next.js lädt diese Datei automatisch und hält ihre Werte ausschließlich serverseitig:
App Router (Next.js 13+)
Erstelle die beiden unten gezeigten Route-Handler-Dateien. Jede Datei exportiert eine benannte HTTP-Methoden-Funktion (GET oder POST) – die Konvention des App Routers.
- challenge/route.ts
- verify/route.ts
createChallenge(5, 4, 60) erzeugt 4 signierte Challenge-Tokens mit Schwierigkeit 5, jeweils 60 Sekunden gültig. Die Funktion gibt ein Array von JWT-Strings zurück; das Einpacken in { challenges } entspricht dem Antwortvertrag, den das Ribaunt-Widget erwartet.Pages Router (Next.js 12 und älter)
Wenn du das Verzeichnispages/api/ verwendest, erstelle die beiden Handler-Dateien unten. Jede exportiert standardmäßig eine asynchrone Funktion, die NextApiRequest und NextApiResponse erhält.
- pages/api/captcha/challenge.ts
- pages/api/captcha/verify.ts
Serverless- und Edge-Deployments
Der Standardmodus Der
replayPrevention: 'local' speichert verwendete Token-IDs in einer prozessinternen Map. Wenn deine Anwendung als Serverless-Funktionen oder über mehrere Instanzen läuft, beginnt jeder Kaltstart mit einem leeren Store, sodass ein gegen eine Instanz gelöstes Token gegen eine andere wiederholt werden kann.Um Cross-Instance-Replays zu verhindern, übergib replayPrevention: 'remote' zusammen mit einem replayStore-Adapter, der von einem atomaren verteilten Store gestützt wird (zum Beispiel Redis mit einer SET NX-Operation):replayStore muss eine Methode consume(jti: string, expiresAt: number): Promise<boolean> implementieren, die atomar beim ersten Auftreten eines bestimmten jti true und bei jedem nachfolgenden Aufruf false zurückgibt.