rvxlab / hcaptcha
hCaptcha for Laravel
5.2.0
2024-03-05 00:50 UTC
Requires
- php: ^7.4 || ^8.0
- ext-json: *
- guzzlehttp/guzzle: ^7.4
- illuminate/support: ^8.28 || ^9.0 || ^10.0 || ^11.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.6
- nunomaduro/collision: ^5.10 || ^6.0 || ^7.0
- nunomaduro/larastan: ^1.0 || ^2.0
- orchestra/testbench: ^6.24 || ^7.0 || ^8.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5.23 || ^10.0
- roave/security-advisories: dev-latest
- spatie/phpunit-snapshot-assertions: ^4.2 || ^5.0
Suggests
- laravelcollective/html: Allows rendering the HCaptcha widget using the Form facade
README
Laravel HCaptcha
一个易于在 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_SECRET
和 HCAPTCHA_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 许可证授权。