larsnieuwenhuizen / no-captcha
从https://github.com/anhskohbo/no-captcha Fork而来 | Laravel的No CAPTCHA reCAPTCHA。
2.4.0
2017-08-30 18:36 UTC
Requires
- php: >=5.5.5
- guzzlehttp/guzzle: ^6.2
- illuminate/support: 5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*
README
对于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_SECRET
和NOCAPTCHA_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(); ?>