teampanfu/laravel-turnstile

Laravel 的 Cloudflare Turnstile 服务包。

v1.0.2 2023-08-07 15:03 UTC

This package is auto-updated.

Last update: 2024-09-18 00:41:34 UTC


README

Latest Version Total Downloads Software License

一个将 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 许可证 许可。