参考手册Workspace 包参考
captcha 人机验证
基于 Cloudflare Turnstile 的人机验证,防止机器人注册和暴力破解
这是什么
@01mvp/captcha 是项目的人机验证包,基于 Cloudflare Turnstile。它的作用是区分真人和机器程序。
传统验证码让你选"哪个格子里有红绿灯"或输入歪歪扭扭的字母,Turnstile 的做法更友好:大部分情况下它会自动判断你是真人(通过浏览器行为分析),不需要你手动操作。只有可疑的情况才会弹出挑战。
能做什么
- 防止机器人注册:注册页加上验证,防止批量创建垃圾账号
- 防止暴力破解:登录接口加上验证,防止程序不断尝试密码
- 保护任何表单:联系表单、投票、抽奖等都可以加验证
怎么配置
先去 Cloudflare Turnstile Dashboard 创建站点,拿到两个密钥:
TURNSTILE_SECRET_KEY 是服务端密钥,绝对不要暴露给前端或提交到 Git。NEXT_PUBLIC_TURNSTILE_SITE_KEY 是客户端密钥,可以安全暴露。
# 服务端密钥(后端用,不要暴露给前端)
TURNSTILE_SECRET_KEY=0x4AAAAAAA...
# 客户端密钥(前端用,可以暴露)
NEXT_PUBLIC_TURNSTILE_SITE_KEY=0x4AAAAAAA...开发环境下可以关掉验证(enabled: false),避免频繁操作。
大概原理
前端页面加载 Turnstile 组件
→ Cloudflare 在后台分析浏览器行为(自动完成验证)
→ 如果觉得可疑,弹出简单的点击挑战
→ 验证通过后生成一个 Token(令牌)
→ 前端把 Token 一起发给后端 API
→ 后端调用 Cloudflare 验证这个 Token 是否有效
→ 有效 → 继续业务逻辑
→ 无效 → 返回错误(可能是机器人)关键点:前端验证只是体验层,真正的安全检查在后端(API 路由里验证 Token)。不要在前端判断验证是否通过就放行。
相关链接
- 权限与风控指南
- Cloudflare Turnstile 文档
- @01mvp/auth 包 -- 认证系统,登录注册页需要人机验证