Captcha

验证码插件 通过为关键端点添加验证码验证,将机器人防护集成到您的 Better Auth 系统。该插件确保只有人类用户才能执行注册、登录或重置密码等操作。目前支持以下提供商:

该插件可与 电子邮件与密码 身份验证无缝开箱即用。要与其他身份验证方法一起使用,您需要在插件选项中配置 endpoints 数组。

安装

将插件添加到您的 auth 配置中

auth.ts
import { betterAuth } from "better-auth";
import { captcha } from "better-auth/plugins";

export const auth = betterAuth({
    plugins: [ 
        captcha({ 
            provider: "cloudflare-turnstile", // or google-recaptcha, hcaptcha
            secretKey: process.env.TURNSTILE_SECRET_KEY!, 
        }), 
    ], 
});

将验证码令牌添加到您的请求头中

为所有受保护端点,将验证码令牌添加到请求头中。此示例展示了如何在 signIn 请求中包含它:

await authClient.signIn.email({
    email: "user@example.com",
    password: "secure-password",
    fetchOptions: { 
        headers: { 
            "x-captcha-response": turnstileToken, 
            "x-captcha-user-remote-ip": userIp, // optional: forwards the user's IP address to the captcha service
        }, 
    }, 
});

工作原理

该插件充当中间件:它拦截所有 POST 请求到配置的端点(参见 插件选项 部分中的 endpoints)。

它通过调用验证码提供商的 /siteverify 在服务器上验证验证码令牌。

  • 如果令牌缺失、被验证码提供商拒绝,或 /siteverify 端点不可用,则插件返回错误并中断请求。
  • 如果令牌被验证码提供商接受,则中间件返回 undefined,表示允许请求继续。

插件选项

  • provider (必需): 您的验证码提供商。
  • secretKey (必需): 用于服务器端验证的提供商密钥。
  • endpoints (可选): 覆盖默认路径数组,其中强制执行验证码验证。默认为:["/sign-up/email", "/sign-in/email", "/forget-password",]
  • minScore (可选 - 仅 Google ReCAPTCHA v3): 最小分数阈值。默认为 0.5
  • siteKey (可选 - 仅 hCaptcha): 防止一个 sitekey 上发行的令牌在其他地方被兑换。
  • siteVerifyURLOverride (可选): 覆盖验证码验证请求的端点 URL。

On this page