Cloudflare Turnstile — бесплатный инструмент для замены CAPTCHA. Вот как вы можете интегрировать Cloudflare Turnstile в ваше приложение Laravel.

Появление нового пакета ryangjchandler/laravel-cloudflare-turnstile для интеграции Cloudflare Turnstile в Laravel представляет собой удобный способ автоматизации процесса. Давайте рассмотрим, как можно использовать этот пакет для интеграции Cloudflare Turnstile в вашем приложении Laravel.

Шаг 1: Установка пакета

Установите пакет через Composer, выполнив следующую команду в корневой директории вашего проекта Laravel:

composer require ryangjchandler/laravel-cloudflare-turnstile

Шаг 2: Настройка конфигурации

Добавьте следующие конфигурационные значения в ваш файл config/services.php:

return [
    // ...
    'turnstile' => [
        'key' => env('TURNSTILE_SITE_KEY'),
        'secret' => env('TURNSTILE_SECRET_KEY'),
    ],
];

Затем добавьте ключ сайта и секретный ключ Cloudflare Turnstile в ваш файл .env:

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

Шаг 3: Использование в представлениях

В вашем макете Blade, включите скрипты Turnstile, используя директиву Blade @turnstileScripts. Это должно быть добавлено в <head> вашего документа:

<html>
    <head>
        @turnstileScripts()
    </head>
    <body>
        {{ $slot }}
    </body>
</html>

Затем, внутри формы, используйте компонент <x-turnstile /> для вывода соответствующей разметки с вашим ключом сайта:

<form action="/" method="POST">
    <x-turnstile />
    <button>
        Submit
    </button>
</form>

Шаг 4: Валидация на сервере

На сервере используйте предоставленное правило валидации для проверки ответа CAPTCHA. Вы можете использовать макрос Rule::turnstile() или внедрить правило через контейнер:

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],
    ]);
}

Шаг 5: Настройка виджета

Вы можете настроить виджет, передавая атрибуты компоненту <x-turnstile />. Для получения дополнительной информации о параметрах обратитесь к официальной документации.

Шаг 6: Интеграция с Livewire

Пакет также может легко интегрироваться с Livewire. После успешной валидации свойство, указанное в wire:model, будет обновлено с токеном Turnstile:

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