出海技术栈集成教程(八):Cloudflare Turnstile 人机检测

我开发了 next.js saas 模板 Nexty.dev,很多用户告诉我文档太详细了,于是我决定把出海技术栈、海外第三方服务集成的文档发出来,希望帮到更多出海的朋友。👉 原文链接

本系列分享的内容包含:


Cloudflare Turnstile 是由 Cloudflare 提供的免费人机验证解决方案,具有用户体验友好、非侵入式挑战等特点,能够有效识别和阻止恶意机器人。

当你的 SaaS 产品用户逐渐增加的时候,防范自动化机器人和恶意行为。Nexty 提供了 Cloudfalre Turnstile 集成选项,你可以根据本文教程开启你的人机验证,阻止恶意流量。

集成步骤

由于 Nexty 的 Auth 使用了 Supabase 的服务,而 Supabase 提供了服务端的处理逻辑,这将使得你在 Nexty 使用 Cloudfalre Turnstile 变得异常简单。

Cloudfalre 创建 Turnstile Widget

登录 Cloudflare,打开左侧目录 Turnstile,点击 Add Widget

选择生产环境域名,并手动输入 localhost,后者用于本地测试

选择 Widget Mode 和 pre-clearance

Widget Mode 决定了通过什么方式来判断访客是不是机器人,3个选项含义分别是:

  • Managed(推荐):智能分析访客行为,可信用户直接通过,可疑用户需要点击验证
  • Non-interactive:显示加载动画,后台自动完成验证,用户无需操作
  • Invisible:完全隐藏验证过程,后台静默完成所有检查

Would you like to opt for pre-clearance for this site? 是决定已验证用户在后续访问中是否可以跳过部分验证流程。

  • 选择 No:每次访问都需要完整验证
  • 选择 Yes:根据所选模式提供不同程度的验证豁免

创建完成后,你会获得 Site Key 和 Secret Key。Site Key 用于前端集成,需加入环境变量 NEXT_PUBLIC_TURNSTILE_SITE_KEY。Secret Key 用于后端验证,将在下一步使用。

Supabase 开启 Attack Protection

打开 Supabase - Authentication - Attack Protection,将 Secret Key 填到 Captcha secret 输入框

代码集成

Nexty 在邮箱登录流程中预集成了 Cloudflare Turnstile,你只需要配置环境变量即可使用。

在 Nexty 的代码中,你可以在登录页代码看到下列相关代码:

  1. 导入 Turnstile 组件
ts 复制代码
import { Turnstile } from '@marsidev/react-turnstile'
  1. 创建 state
ts 复制代码
const [captchaToken, setCaptchaToken] = useState<string | undefined>();
  1. 渲染验证组件,并提供 onSuccess 属性作为成功回调
tsx 复制代码
{process.env.NEXT_PUBLIC_TURNSTILE_SITE_KEY && (
  <Turnstile
    siteKey={process.env.NEXT_PUBLIC_TURNSTILE_SITE_KEY}
    onSuccess={(token) => {
      setCaptchaToken(token);
    }}
  />
)}

验证效果

配置完成后,用户在进行邮箱登录时将自动触发 Turnstile 验证,有效防范机器人攻击,提升网站安全性。

总结

出海技术栈集成系列文章会同步发布到我的掘金专栏,欢迎订阅关注。

同时也欢迎出海的朋友了解 Top3 的出海 Next.js SaaS 模板 Nexty.dev

相关推荐
invicinble17 小时前
把握前端项目的核心(vibecoding)
前端
0end118 小时前
AI Agent 学习笔记(三):上下文工程(下)—— KV Cache、提示词设计与 Agent Skills
前端·aigc·ai编程
CAD老兵18 小时前
在浏览器里对比 DWG/DXF 图纸 —— @mlightcad/cad-diff-viewer
前端·javascript·github
JasonYin18 小时前
AI 定义的 H5移动端 开发规范,直接抄作业!
前端
诗章与猫18 小时前
Leaflet 渲染 100 万 marker 卡成 PPT?我用 WebGL 重写了渲染器
前端
用户9210802628618 小时前
在 AI 代码生成项目里接入 Thought:别展示“玄学思维链”,只展示用户真正关心的工具调用
前端
艾醒(AiXing-w)19 小时前
LangChain 1.0 入门(二):LangChain 全模型标准化接入最佳实践(小白参数详解版)
前端·javascript·langchain
计算机魔术师19 小时前
我看了 Hugging Face 的 Daily Papers,发现这件事
前端
yu俞娥宝20 小时前
Codex官网前端可抄吗?技术拆解、风险边界与合规借鉴方案
前端
捧 花20 小时前
FastAPI 基础语法:从一个完整接口理解 Web API 的设计
前端·python·fastapi·middleware