验证码
验证码插件通过在关键端点添加验证码验证,将机器人防护集成到你的 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。