ryangjchandler/laravel-cloudflare-turnstile
validateTurnstile).TurnstileVerified, TurnstileFailed), enabling extensibility for analytics, logging, or custom workflows..env). Assumes the application already uses Cloudflare (or is willing to adopt it).FormRequest classes) and Blade templates, but manual integration is needed for non-form submissions (e.g., APIs).validateTurnstile in FormRequest classes.turnstile())..env (if not already using Cloudflare).composer require ryangjchandler/laravel-cloudflare-turnstile
config/services.php:
'turnstile' => [
'site_key' => env('TURNSTILE_SITE_KEY'),
'secret_key' => env('TURNSTILE_SECRET_KEY'),
],
php artisan vendor:publish --provider="RyanChandler\LaravelCloudflareTurnstile\TurnstileServiceProvider"
{!! Turnstile::render() !!}
FormRequest:
public function rules()
{
return [
'turnstile_token' => ['required', 'turnstile'],
];
}
use RyanChandler\LaravelCloudflareTurnstile\Facades\Turnstile;
$valid = Turnstile::verify($request->input('turnstile_token'));
Http::fake()).laravel-recaptcha) if both are used..env and config/services.php.FormRequest classes..env and config/services.php are managed via version control or secrets manager (e.g., Vault).429 Too Many Requests.| Failure Scenario | Impact | Mitigation |
|---|---|---|
| Cloudflare API downtime | Forms break, user submissions fail | Implement a fallback CAPTCHA (e.g., hCaptcha) or manual review. |
| Invalid/missing Turnstile tokens | False rejections or spam | Use client-side validation + server-side checks. Log failed attempts. |
| Token expiry (5-minute default) | User frustration | Inform users of token expiry (e.g., "Please complete the CAPTCHA |
How can I help you explore Laravel packages today?