Captcha为Laravel 5 应用生成验证码例子

作者:袖梨 2022-11-14

Laravel Captcha

1、安装

我们通过 Composer 安装 Captcha 扩展包:

composer require mews/captcha

注:Windows中使用该扩展包还需要安装 GD2 扩展(在php.ini中取消php_gd2.dll前面的注释)。

2、配置

使用Captcha服务提供者之前还需要在config/app.php中注册服务提供者:

'providers' => [
// ...
MewsCaptchaCaptchaServiceProvider::class,
]

同时注册下相应门面:

'aliases' => [
// ...
'Captcha' => MewsCaptchaFacadesCaptcha::class,
]

如果要使用自定义的配置,还可以发布配置文件到config目录:

$ php artisan vendor:publish

编辑新生成的captcha.php:

return [
'default' => [
'length' => 5,
'width' => 120,
'height' => 36,
'quality' => 90,
],
// ...
];

3、使用示例

// app/Http/routes.php

Route::any('captcha-test', function()
{
if (Request::getMethod() == 'POST')
{
$rules = ['captcha' => 'required|captcha'];
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails())
{
echo '

Incorrect!

';
}
else
{
echo '

Matched :)

';
}
}

$form = '

';
$form .= '';
$form .= '

' . captcha_img() . '

';
$form .= '

';
$form .= '

';
$form .= '
';
return $form;
});


显示效果如下:

Laravel Captcha

如果要返回原生图片,可以调用这个函数:

captcha();
或者

Captcha::create();
如果要返回URL:

captcha_src();
或者

Captcha::src();
如果要返回HTML:

captcha_img();
我们这个示例中使用的就是这个函数,或者调用Captcha门面上的方法:

Captcha::img();
要使用配置文件captcha.php中不同的配置项,可以这样调用:

captcha_img('flat');
Captcha::img('inverse');

注意:

在laravel 5.2中这个包会出现验证码怎么也无法验证成功的问题,因为5.2采用了middleware分组,并没有使用全局中间件导致这个包没有启用session导致上述问题。解决办法:在

vendor/mews/captcha/src/CaptchaServiceProvider.php
29行的

this->app['router']->get('captcha/{config?}', 'MewsCaptchaCaptchaController@getCaptcha')
后面添加

->middleware('web');

确认你的web中间件分组内有StartSession中间件。另外你也可以添加5.2新特性频率限制到后面

->middleware('throttle:60,1')

以防止恶意攻击。

相关文章

精彩推荐