在 Next.js 14 中使用 reCAPTCHA v3

💡 原文英文,约600词,阅读约需3分钟。
📝

内容提要

该文章介绍了如何使用useFormState和useActionState与Google的reCaptcha v3集成,以实现表单数据的提交和验证。首先需要在reCAPTCHA v3管理控制台创建一个新站点,并将相关密钥添加到项目的环境变量中。然后使用react-google-recaptcha-v3包提供的组件和方法来运行reCaptcha脚本,并将验证码响应添加到表单数据中。最后,在服务器端验证验证码数据,并根据验证结果进行相应处理。作者表示将来还会更新关于useActionState的集成方法。

🔎

延伸解读

reCAPTCHA v3 的分数机制与验证逻辑

文章使用 reCAPTCHA v3 的分数机制,通过 Google 的 siteverify 接口返回的 score 来判断请求是否来自机器人。开发者需要根据业务场景设定阈值,例如分数低于某个值则视为可疑。这种机制无需用户交互,但需要服务器端验证,且分数并非绝对可靠,需结合其他风控措施。

环境变量配置与密钥安全

文章强调将 reCAPTCHA 的站点密钥和秘密密钥分别存储在环境变量中,其中站点密钥以 NEXT_PUBLIC_ 前缀暴露给浏览器,而秘密密钥仅在服务器端使用。同时提醒将 .env.local 加入 .gitignore,避免密钥泄露。这是集成第三方服务时的基本安全实践。

与 useFormState 的集成方式

文章展示了如何通过自定义函数 addRecaptcha 在表单提交前获取 reCAPTCHA 令牌,并将其作为表单字段附加到 FormData 中,再传递给服务器 action。这种方式不改变原有的 useFormState 流程,只是增加了一个预处理步骤,使得验证码验证与表单验证逻辑可以无缝结合。

当前限制与未来更新

作者指出该方法已在 useFormState 上测试通过,但尚未验证 useActionState,并计划未来更新。这意味着如果读者使用 useActionState,可能需要自行调整。此外,文章未涉及错误处理细节,如验证失败后的用户反馈,实际应用中需补充。

Q&A

如何在 Next.js 中集成 reCAPTCHA v3?

在 Next.js 中集成 reCAPTCHA v3 需要创建一个新站点并配置相关密钥,然后使用 react-google-recaptcha-v3 包提供的组件来运行 reCAPTCHA 脚本,并在表单提交前获取验证码响应。

如何设置环境变量以使用 reCAPTCHA v3?

在项目中创建 .env.local 文件,并添加 NEXT_PUBLIC_RECAPTCHA_SITE_KEY 和 RECAPTCHA_SECRET_KEY 变量,确保将其添加到 .gitignore 中。

如何在表单提交时添加 reCAPTCHA 响应?

在表单组件中使用 useFormState,并在提交前调用 executeRecaptcha 函数获取验证码响应,将其添加到表单数据中。

如何在服务器端验证 reCAPTCHA 数据?

在服务器端接收验证码令牌后,向 Google 的验证 API 发送请求,使用 RECAPTCHA_SECRET_KEY 进行验证,并根据返回的分数处理结果。

使用 useActionState 时如何集成 reCAPTCHA?

文章提到将来会更新关于 useActionState 的集成方法,目前主要使用 useFormState 进行集成。

react-google-recaptcha-v3 包的作用是什么?

react-google-recaptcha-v3 包提供 GoogleReCaptchaProvider 组件,用于运行 reCAPTCHA 脚本并将结果传递给子组件。

🏷️

标签

➡️

继续阅读