Step-by-Step Setup for Google reCAPTCHA v3 in Next.js (Frontend) + CodeIgniter 4 (Backend) ๐น Step 1: Get reCAPTCHA v3 API Keys Go to https://www.google.com/recaptcha/admin/create Select reCAPTCHA v3 Register your domain (e.g. localhost, example.com) Youโll receive: Site Key (for frontend) Secret Key (for backend) ๐น Step 2: Add reCAPTCHA v3 to Register Form Install: bash Copy Edit npm install react-google-recaptcha-v3 Update frontend/app/register/page.tsx: tsx Copy Edit 'use client'; import React, { useEffect, useState } from 'react'; import { GoogleReCaptchaProvider, useGoogleReCaptcha } from 'react-google-recaptcha-v3'; import Form from 'react-bootstrap/Form'; import Button from 'react-bootstrap/Button'; import Alert from 'react-bootstrap/Alert'; import api from '@/lib/axios'; import Cookies from 'js-cookie'; import { useRouter } from 'next/navigation'; function RegisterFormInner() { const { executeRecaptcha } = useGoogleReCaptcha(); const [formData, setFormData] = useState({ name: '', email: '', password: '', confirmPassword: '' }); const [error, setError] = useState(''); const [loading, setLoading] = useState(false); const router = useRouter(); const handleChange = (e) => setFormData({ ...formData, [e.target.name]: e.target.value }); const handleSubmit = async (e) => { e.preventDefault(); if (!executeRecaptcha) { setError('Recaptcha not ready.'); return; } if (formData.password !== formData.confirmPassword) { setError('Passwords do not match'); return; } const token = await executeRecaptcha('register'); try { setLoading(true); const res = await api.post('/register', { ...formData, captcha: token }); if (res.data.message === 'Verification email sent.') { router.push('/verify?email=' + formData.email); } } catch (err) { setError('Registration failed.'); } finally { setLoading(false); } }; return (