如何在 Next.js 表單中添加 ReCaptcha
ReCaptcha 是 Google 對表單垃圾郵件和濫用的解決方案。
這是一個非常有價值的工具。如果您還沒有在 https://www.google.com/recaptcha 創建帳戶,請先創建並添加您的網站域名。
選擇 v2,並選擇「我不是機器人」複選框:
你會獲得一個站點金鑰和站點密鑰。
將密鑰儲存在您的.env
文件中:
1 | RECAPTCHA_SECRET=<....> |
現在,在您的 Next.js 網站中使用 npm 安裝react-google-recaptcha
:
1 | npm install react-google-recaptcha |
現在,在具有表單的頁面中引入它:
1 | import ReCAPTCHA from 'react-google-recaptcha' |
並將其添加到 JSX 中:
1 | <ReCAPTCHA size="normal" sitekey="<YOUR SITE KEY>" /> |
您應該在表單中看到它:
現在,如果您嘗試提交表單,它能正常工作,因為它什麼都不做。任何人,包括機器人,在不點擊「我不是機器人」按鈕的情況下都可以成功提交表單。
您需要在服務器端驗證驗證碼,以使其有用。
假設您將表單發送到 Next.js API 路由。在其中,添加一個validateCaptcha
方法:
1 | const validateCaptcha = (response_key) => { |
現在,在處理請求的主代碼之前,添加以下代碼:
1 | if (!(await validateCaptcha(req.body['g-recaptcha-response']))) { |
在 Next.js 中創建 /captcha
頁面,以在驗證碼檢查無效時進行重定向。
在前端,在提交表單之前,應該添加一些驗證:
1 | <form |
tags: [“Next.js”, “ReCaptcha”, “form”, “spam”, “validation”]