teampanfu / laravel-turnstile
Laravel 的 Cloudflare Turnstile 服务包。
v1.0.2
2023-08-07 15:03 UTC
Requires
- php: ^7.2|^8.0
- guzzlehttp/guzzle: ^6.2|^7.2
Requires (Dev)
- phpunit/phpunit: ^10.1
README
一个将 Cloudflare 的 Turnstile 服务无缝集成到您的 Laravel 应用程序中的包。
安装
要安装,请使用 Composer
composer require teampanfu/laravel-turnstile
手动设置
从 Laravel 5.5 开始,包通过 包发现 自动检测。因此,如果您使用的是较新版本,可以跳过这些步骤。
将以下内容添加到您的 config/app.php
'providers' => [ ... /* * Package Service Providers... */ Panfu\Laravel\Turnstile\TurnstileServiceProvider::class, ... ], 'aliases' => [ ... 'Turnstile' => Panfu\Laravel\Turnstile\Facades\Turnstile::class, ... ],
然后发布配置文件
php artisan vendor:publish --provider="Panfu\Laravel\Turnstile\TurnstileServiceProvider"
配置
要开始,请登录到 Cloudflare 控制台,在侧导航中转到“Turnstile”,并添加您的网站。
您将获得一个网站密钥和一个密钥。您可以将这两个密钥按如下方式添加到您的 .env 文件中
TURNSTILE_SITEKEY=1x00000000000000000000AA
TURNSTILE_SECRET=1x0000000000000000000000000000000AA
使用方法
显示
要显示小部件在您的网站上,您只需添加以下 HTML 代码(假设您正在使用 Blade)
<div class="cf-turnstile" data-sitekey="{{ config('turnstile.sitekey') }}"></div>
有关可用配置的列表(如主题或语言),请参阅文档。
脚本
为了让小部件工作,您需要包含 JavaScript 资源。为此,您可以添加以下 HTML 代码
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
验证
要验证请求,您可以使用以下规则
$request->validate([ 'cf-turnstile-response' => ['turnstile'], ]);
您可以省略 required 规则,因为它已被本包处理。
自定义验证消息
如果您想显示验证失败时的错误消息,请将以下内容添加到您的 lang/[lang]/validation.php 文件中
'custom' => [ 'cf-turnstile-response' => [ 'turnstile' => 'The validation has failed.', ], ],
不使用 Laravel 使用
虽然该包专为 Laravel 设计,但您仍然可以在不使用 Laravel 的情况下使用它。以下是一个示例
<?php require_once 'vendor/autoload.php'; use Panfu\Laravel\Turnstile\Turnstile; $sitekey = '1x00000000000000000000AA'; $secret = '1x0000000000000000000000000000000AA'; $turnstile = new Turnstile($secret); if (! empty($_POST)) { $responseToken = $_POST['cf-turnstile-response']; $remoteip = $_SERVER['REMOTE_ADDR']; $isValid = $turnstile->validate($responseToken, $remoteip); // $remoteip is optional if ($isValid) { echo 'Token is valid.'; } else { echo 'Token is not valid.'; } exit; } ?> <form method="POST"> <div class="cf-turnstile" data-sitekey="<?= $sitekey ?>"></div> <button type="submit">Submit</button> </form> <script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
远程 IP 帮助防止滥用,确保当前访问者是接收令牌的人。
测试
$ ./vendor/bin/phpunit
贡献
如果您发现错误或对功能有建议,请随时创建新的问题或拉取请求。
我们感谢每一个贡献!
许可证
此包是开源软件,根据 MIT 许可证 许可。