PHPackages                             mortogo321/laravel-cloudflare-turnstile - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Security](/categories/security)
4. /
5. mortogo321/laravel-cloudflare-turnstile

ActiveLibrary[Security](/categories/security)

mortogo321/laravel-cloudflare-turnstile
=======================================

Laravel wrapper package for Cloudflare Turnstile with invisible mode, button disabling, and auto-refresh

v1.0.0(7mo ago)00MITPHPPHP ^8.1

Since Oct 10Pushed 2mo agoCompare

[ Source](https://github.com/mortogo321/laravel-cloudflare-turnstile)[ Packagist](https://packagist.org/packages/mortogo321/laravel-cloudflare-turnstile)[ Docs](https://github.com/mortogo321/laravel-cloudflare-turnstile)[ RSS](/packages/mortogo321-laravel-cloudflare-turnstile/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (5)Versions (2)Used By (0)

Laravel Cloudflare Turnstile
============================

[](#laravel-cloudflare-turnstile)

[![Latest Version on Packagist](https://camo.githubusercontent.com/00e2cbf73dfa680c28ee2862a95607e82009e40de85cc9b14a26ccc83944c829/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6d6f72746f676f3332312f6c61726176656c2d636c6f7564666c6172652d7475726e7374696c652e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/mortogo321/laravel-cloudflare-turnstile)[![Total Downloads](https://camo.githubusercontent.com/0604bdc2964bc341ce2c543c9897f75e6a9bda17a1cf1d3e3738024d0d4184bc/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6d6f72746f676f3332312f6c61726176656c2d636c6f7564666c6172652d7475726e7374696c652e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/mortogo321/laravel-cloudflare-turnstile)[![GitHub License](https://camo.githubusercontent.com/549f5ea5157c2272a8bd65a36176a8e40c804081293b3e8b4c673dd57daabdc0/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6d6f72746f676f3332312f6c61726176656c2d636c6f7564666c6172652d7475726e7374696c652e7376673f7374796c653d666c61742d737175617265)](https://github.com/mortogo321/laravel-cloudflare-turnstile/blob/main/LICENSE)[![PHP Version](https://camo.githubusercontent.com/dee01036a033efd2a3b0928175209445f8b5a8224e00f7e12a239d3a9719e839/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f6d6f72746f676f3332312f6c61726176656c2d636c6f7564666c6172652d7475726e7374696c652e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/mortogo321/laravel-cloudflare-turnstile)

A Laravel wrapper package for Cloudflare Turnstile with invisible mode by default, automatic submit button disabling until verification is complete, and refresh button on failure.

Features
--------

[](#features)

- **Invisible Mode by Default**: Uses `execute` appearance mode for seamless user experience
- **Auto-disable Submit Button**: Automatically disables submit buttons until Turnstile is ready
- **Refresh on Failure**: Shows a refresh button when verification fails or times out
- **Easy Integration**: Simple Blade component for quick integration
- **Flexible Validation**: Multiple validation methods (rule class, validation rule string, manual verification)
- **Customizable**: Override all settings per widget or globally
- **Controller-Friendly**: Easy to use in any Laravel controller

Installation
------------

[](#installation)

Install the package via Composer:

```
composer require mortogo321/laravel-cloudflare-turnstile
```

Publish the configuration file:

```
php artisan vendor:publish --tag=turnstile-config
```

Optionally, publish the views if you want to customize them:

```
php artisan vendor:publish --tag=turnstile-views
```

Configuration
-------------

[](#configuration)

Add your Cloudflare Turnstile keys to your `.env` file:

```
TURNSTILE_SITE_KEY=your-site-key
TURNSTILE_SECRET_KEY=your-secret-key
TURNSTILE_APPEARANCE=execute
TURNSTILE_THEME=auto
```

Get your Turnstile keys from:

### Configuration Options

[](#configuration-options)

The package provides several configuration options in `config/turnstile.php`:

- `site_key`: Your Turnstile site key
- `secret_key`: Your Turnstile secret key
- `appearance`: Widget appearance mode (`always`, `execute`, `interaction-only`) - default: `execute`
- `theme`: Widget theme (`light`, `dark`, `auto`) - default: `auto`
- `size`: Widget size (`normal`, `compact`) - default: `normal`
- `language`: Widget language (default: `auto`)
- `retry`: Retry behavior (`auto`, `never`) - default: `auto`
- `retry_interval`: Time between retries in milliseconds - default: `8000`
- `timeout`: Verification timeout in seconds - default: `30`
- `show_refresh_button`: Show refresh button on failure - default: `true`
- `disable_submit_until_ready`: Disable submit button until ready - default: `true`

Usage
-----

[](#usage)

### Basic Usage in Blade Views

[](#basic-usage-in-blade-views)

Add the Turnstile widget to your form:

```

    @csrf

    Submit

```

### Controller Validation

[](#controller-validation)

#### Option 1: Using the Validation Rule Class (Recommended)

[](#option-1-using-the-validation-rule-class-recommended)

```
