验证码

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

【The Captcha Plugin integrates bot protection into your Better Auth system by adding captcha verification for key endpoints. This plugin ensures that only human users can perform actions like signing up, signing in, or resetting passwords. The following providers are currently supported:

这个插件开箱即用,支持 邮箱和密码认证。要与其他认证方法一起使用,你需要在插件选项中配置 端点数组。

安装

【Installation】

将插件添加到你的 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, captchafox
            secretKey: process.env.TURNSTILE_SECRET_KEY!, 
        }), 
    ], 
});

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

x-captcha-user-remote-ip 头不再需要 - IP 现在由服务器端自动检测。

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

await authClient.signIn.email({
    email: "user@example.com",
    password: "secure-password",
    fetchOptions: { 
        headers: { 
            "x-captcha-response": turnstileToken, 
        }, 
    }, 
});

它是如何工作的

【How it works】

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

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

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

插件选项

【Plugin Options】

  • provider(必填):你的验证码提供商。
  • secretKey(必填):用于服务器端验证的提供商密钥。
  • endpoints(可选):替换默认的需要进行验证码验证的路径数组。如果设置,只有指定的路径会受到保护。默认值是 ['/sign-up/email', '/sign-in/email', '/request-password-reset']
  • minScore(可选 - 仅适用于 Google ReCAPTCHA v3):最低分数阈值。默认值为 0.5
  • siteKey(可选 - 仅限 hCaptchaCaptchaFox):防止在一个 sitekey 上发放的令牌在其他地方被使用。
  • siteVerifyURLOverride(可选):覆盖验证码验证请求的端点 URL。

On this page