验证码
验证码插件通过在关键端点添加验证码验证,将防机器人保护集成到你的 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 配置中
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,
},
},
});- 要在客户端实现 Cloudflare Turnstile,请参阅官方的 Cloudflare Turnstile 文档 或使用像 react-turnstile 这样的库。
- 要在客户端实现 Google reCAPTCHA,请参考官方 Google reCAPTCHA 文档,或使用类似 react-google-recaptcha(v2)和 react-google-recaptcha-v3(v3)的库。
- 要在客户端实现 hCaptcha,请参阅官方 hCaptcha 文档 或使用诸如 @hcaptcha/react-hcaptcha 的库
- 要在客户端实现 CaptchaFox,请参考官方 CaptchaFox 文档 或使用类似 @captchafox/react 的库
它是如何工作的
🌐 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(可选 - 仅限 hCaptcha 和 CaptchaFox):防止在一个 sitekey 上发放的令牌在其他地方被使用。siteVerifyURLOverride(可选):覆盖验证码验证请求的端点 URL。