larsnieuwenhuizen/no-captcha

从https://github.com/anhskohbo/no-captcha Fork而来 | Laravel的No CAPTCHA reCAPTCHA。

2.4.0 2017-08-30 18:36 UTC

This package is auto-updated.

Last update: 2024-09-16 22:19:15 UTC


README

Build Status Latest Stable Version Total Downloads Latest Unstable Version License

recaptcha_anchor 2x

对于Laravel 4,使用v1分支。

安装

composer require anhskohbo/no-captcha

Laravel 5

设置

注意 此包支持Laravel 5.5的自动发现功能,因此如果您使用Laravel 5.5,请跳过以下设置说明。

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

1- 将ServiceProvider添加到providers数组中

Anhskohbo\NoCaptcha\NoCaptchaServiceProvider::class,

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

'NoCaptcha' => Anhskohbo\NoCaptcha\Facades\NoCaptcha::class,

配置

.env文件中添加NOCAPTCHA_SECRETNOCAPTCHA_SITEKEY

NOCAPTCHA_SECRET=secret-key
NOCAPTCHA_SITEKEY=site-key

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

用法

初始化js源

使用默认选项

 {!! NoCaptcha::renderJs() !!}

使用语言支持onloadCallback选项

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

显示reCAPTCHA

默认小部件

{!! NoCaptcha::display() !!}

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

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

验证

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

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

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

'custom' => [
    'g-recaptcha-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('g-recaptcha-response'))
    <span class="help-block">
        <strong>{{ $errors->first('g-recaptcha-response') }}</strong>
    </span>
@endif

测试

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

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

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

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

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

不使用Laravel

查看以下示例

<?php

require_once "vendor/autoload.php";

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

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

?>

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

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

贡献

https://github.com/anhskohbo/no-captcha/pulls