rubensrocha/h-captcha

hCaptcha For Laravel

4.3.3 2020-11-29 23:47 UTC

This package is auto-updated.

Last update: 2024-09-29 05:56:05 UTC


README

基于 laravel-reCAPTCHA 开发的项目。

安装

composer require rubensrocha/h-captcha

Laravel 5 及以上版本

设置

app/config/app.php 中添加以下内容

1- 将 ServiceProvider 添加到 providers 数组中

Rubensrocha\HCaptcha\HCaptchaServiceProvider::class,

2- 将类别名添加到 aliases 数组中

'HCaptcha' => Rubensrocha\HCaptcha\Facades\HCaptcha::class,

3- 发布配置文件

php artisan vendor:publish --provider="Rubensrocha\HCaptcha\HCaptchaServiceProvider"

配置

.env 文件中添加 HCAPTCHA_SECRETHCAPTCHA_SITEKEY

HCAPTCHA_SECRET=secret-key
HCAPTCHA_SITEKEY=site-key

(您可以从 这里 获取它们)

用法

初始化 js 源

使用默认选项

 {!! HCaptcha::renderJs() !!}

使用 语言支持onloadCallback 选项

 {!! HCaptcha::renderJs('fr', true, 'recaptchaCallback') !!}

显示 reCAPTCHA

默认小部件

{!! HCaptcha::display() !!}

使用 自定义属性(主题、大小、回调等)

{!! HCaptcha::display(['data-theme' => 'dark']) !!}

使用提交按钮的无痕 reCAPTCHA

{!! HCaptcha::displaySubmit('my-form-id', 'submit now!', ['data-theme' => 'dark']) !!}

注意,在此方法中需要表单的 id,以便自动生成的回调在成功的 captcha 验证后提交表单。

验证

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

$validate = Validator::make(Input::all(), [
	'h-captcha-response' => 'required|HCaptcha'
]);
自定义验证消息

将以下值添加到 validation 语言文件中的 custom 数组中

'custom' => [
    'h-captcha-response' => [
        'required' => 'Please verify that you are not a robot.',
        'captcha' => 'Captcha error! try again later or contact site admin.',
    ],
],

然后检查 Form 中的 captcha 错误

@if ($errors->has('h-captcha-response'))
    <span class="help-block">
        <strong>{{ $errors->first('h-captcha-response') }}</strong>
    </span>
@endif

测试

当使用 Laravel 测试功能 时,您需要模拟 captcha 表单元素的响应。

因此,对于涉及 captcha 的任何表单测试,您可以通过模拟外观行为来实现

// prevent validation error on captcha
HCaptcha::shouldReceive('verifyResponse')
    ->once()
    ->andReturn(true);

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

然后您可以像平常一样测试表单的其余部分。

当使用 HTTP 测试时,您可以添加 h-captcha-response 到请求体中以进行 'required' 验证

// prevent validation error on captcha
HCaptcha::shouldReceive('verifyResponse')
    ->once()
    ->andReturn(true);

// POST request, with request body including g-recaptcha-response
$response = $this->json('POST', '/register', [
    'h-captcha-response' => '1',
    'name' => 'John',
    'email' => 'john@example.com',
    'password' => '123456',
    'password_confirmation' => '123456',
]);

非 Laravel

查看下面的示例

<?php

require_once "vendor/autoload.php";

$secret  = 'CAPTCHA-SECRET';
$sitekey = 'CAPTCHA-SITEKEY';
$captcha = new \Rubensrocha\HCaptcha\HCaptcha($secret, $sitekey);

if (! empty($_POST)) {
    var_dump($captcha->verifyResponse($_POST['h-captcha-response']));
    exit();
}

?>

<form action="?" method="POST">
    <?php echo $captcha->display(); ?>
    <button type="submit">Submit</button>
</form>

<?php echo $captcha->renderJs(); ?>