rvxlab/hcaptcha

hCaptcha for Laravel

5.2.0 2024-03-05 00:50 UTC

This package is auto-updated.

Last update: 2024-09-08 17:06:09 UTC


README

Laravel HCaptcha Banner

Laravel HCaptcha

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

一个易于在 Laravel 中包含 HCaptcha 的包。

该项目最初基于 laravel-reCAPTCHA,并从 Scyllaly 分支出来,Scyllaly 看起来已经放弃了该项目。

此分支是 Scyllaly 包的几乎即插即用替代品,保持 4.x 和 5.x 版本相同的命名空间。

要求

需要支持 Laravel 7 或更早版本?请检查 4.x 分支

安装

使用 Composer 安装包

composer require rvxlab/hcaptcha

发布配置文件

php artisan vendor:publish --tag="hcaptcha-config"

可选:发布翻译

php artisan vendor:publish --tag="hcaptcha-lang"

可选:发布视图

php artisan vendor:publish --tag="hcaptcha-views"

配置

.env 文件中添加 HCAPTCHA_SECRETHCAPTCHA_SITEKEY

HCAPTCHA_SECRET=secret-key
HCAPTCHA_SITEKEY=site-key

您可以从 您的 HCaptcha 控制台 获取它们。

使用方法

准备脚本

首先您需要初始化脚本

{!! HCaptcha::renderJs() !!}
// Or
<x-hcaptcha::script />

您可以选择设置地区和自定义回调函数

{!! HCaptcha::renderJs('nl', true, 'myCallbackFunction') !!}
// Or
<x-hcaptcha::script lang="nl" :has-callback="true" on-load-class="myCallbackFunction" />

如果您有一个多语言应用程序,您也可以使用应用程序的地区

<x-hcaptcha::script use-app-locale />

渲染小部件

此包支持常规小部件,以及不可见验证码。

初始化常规小部件

{!! HCaptcha::display() !!}
// Or
<x-hcaptcha::widget />

任何属性都可以作为数组传递给 display 方法,或者作为 Blade 组件的属性

{!! HCaptcha::display([ 'class' => 'my-widget', 'data-test' => 'Test' ]) !!}
// Or
<x-hcaptcha::widget class="my-widget" data-test="Test" />

不可见小部件

如果您希望表单具有不可见的小部件

<form id="register-form" method="post" action="{{ route('register') }}">
    <input type="text" name="email" />
    
    <input type="password" name="password" />
    
    {!! HCaptcha::displaySubmit('register-form', 'Submit', [ 'class' => 'btn' ]) !!}
    // Or
    <x-hcaptcha::submit form-identifier="register-form" class="btn">
        Submit
    </x-hcaptcha::submit>
    @csrf
</form>

如果您为表单定义了自定义回调,您可以定义一个 data-callback 属性

{!! HCaptcha::displaySubmit('register-form', 'Submit', [ 'class' => 'btn', 'data-callback' => 'userDefinedCallback ]) !!}
// Or
<x-hcaptcha::submit form-identifier="register-form" class="btn" data-callback="userDefinedCallback">
    Submit
</x-hcaptcha::submit>

验证

'h-captcha-response' => 'required|HCaptcha' 添加到规则数组中

class RegisterRequest extends \Illuminate\Foundation\Http\FormRequest
{
    public function rules(): array
    {
        return [
            'email' => 'required|email|exists:users,email',
            'password' => 'required',
            'h-captcha-response' => 'required|HCaptcha',
        ];
    }
}

测试

您可以通过在 HCaptcha 门面上调用的 shouldReceive 方法来模拟 HCaptcha 验证

HCaptcha::shouldReceive('verifyResponse')->once()->andReturnTrue();

HCaptcha::shouldReceive('display')->andReturn('<input type="hidden" name="h-captcha-response" value="1" />');

或者当测试 JSON 调用时

HCaptcha::shouldReceive('verifyResponse')->once()->andReturnTrue();

$response = $this->json('POST', '/register', [
    'h-captcha-response' => '1',
    'email' => 'john@example.com',
    'password' => '123456',
]);

升级

有关从 4.x 升级到 5.x 的说明,请参阅 升级指南

许可证

此包根据 MIT 许可证授权。