Google reCAPTCHA давно всех задолбала. Cloudflare подсунули свою штуку — Turnstile. Бесплатно, работает быстро, не орёт про светофоры и велосипеды. Под Laravel есть готовый пакет. Ставим и не морочим голову.

Установка

Тут без фокусов. Вбил:

composer require ryangjchandler/laravel-cloudflare-turnstile

Пакет подтянулся, и всё, поехали дальше.

Конфигурация

В config/services.php добавляешь секцию:

'turnstile' => [
    'key' => env('TURNSTILE_SITE_KEY'),
    'secret' => env('TURNSTILE_SECRET_KEY'),
],

В .env свои ключи:

TURNSTILE_SITE_KEY="1x00000000000000000000AA"
TURNSTILE_SECRET_KEY="2x0000000000000000000000000000000AA"

Без них понятно — ничего работать не будет.

Вставка на фронте

В Blade-шаблон кидаешь скрипт:

<head>
    @turnstileScripts()
</head>

А в форму вставляешь компонент:

<form action="/" method="POST">
    <x-turnstile />
    <button type="submit">Отправить</button>
</form>

Готово, виджет встал. Не надо вручную писать убогие div’ы с data-атрибутами.

Проверка на сервере

Laravel всё сделал красиво — просто правило валидации.

use Illuminate\Validation\Rule;

public function submit(Request $request)
{
    $request->validate([
        'cf-turnstile-response' => ['required', Rule::turnstile()],
    ]);
}

Или через отдельное правило:

use RyanChandler\LaravelCloudflareTurnstile\Rules\Turnstile;

public function submit(Request $request, Turnstile $turnstile)
{
    $request->validate([
        'cf-turnstile-response' => ['required', $turnstile],
    ]);
}

Работает из коробки. Без плясок, без своей логики запросов к API Cloudflare.

Настройка виджета

Нужно пошаманить с внешним видом? Просто добавь атрибуты в компонент:

<x-turnstile theme="dark" size="compact" />

Документацию можно открыть, если реально надо — но по факту хватает пары параметров.

Livewire

Да, и с Livewire дружит:

<x-turnstile wire:model="captchaToken" />

После успешной проверки в модель улетает токен.

Итог

Каждый раз, когда Google заставляет меня тыкать в картинки с автобусами, я думаю, что это не защита от ботов, а проверка на психику. Turnstile от Cloudflare — штука, которая реально экономит нервы (пока что). 

  • Забыл про светофоры.
  • Код интеграции минимален.
  • Есть готовый пакет под Laravel.

Google со своей reCAPTCHA пусть крутит картинки дальше.