laravel 使用gregwar/captcha拓展包实现验证码的生成与验证
发布时间:2018-12-20 16:56:48作者:wangjian浏览量:796点赞量:0
一:安装gregwar/captcha拓展包
composer require gregwar/captcha
二:生成验证码并展示
1:生成验证码方法
public function captchaShow()
{
//生成验证码图片的Builder对象,配置相应属性
$builder = new CaptchaBuilder();
// 设置背景颜色
$builder->setBackgroundColor(220, 210, 230);
$builder->setMaxAngle(25);
$builder->setMaxBehindLines(0);
$builder->setMaxFrontLines(0);
//可以设置图片宽高及字体
$builder->build($width = 250, $height = 70, $font = null);
//获取验证码的内容
$phrase = $builder->getPhrase();
//把内容存入session
session(['phrase'=>$phrase]);
//生成图片
header("Cache-Control: no-cache, must-revalidate");
header('Content-Type: image/jpeg');
$builder->output();
}
将captchaShow方法进行路由配置,这里我配置的是:
Route::get('/captchaShow', 'Test\CaptController@captchaShow');
2:在页面时展示验证码
在html中:
<form name="form" action="/checkCapt" method="post">
<img src="/captchaShow" onclick="this.src='/captchaShow?'+Math.random()" title="点击图片重新获取验证码">
<input type="text" name="captcha">
{{csrf_field()}}
<input type="submit" value="验证"/>
</form>
三:验证
public function checkCapt(Request $request)
{
$data = $request->all();
if (session('phrase') == $data['captcha']) {
//用户输入验证码正确
//清除session
session()->forget('phrase');
return '验证码正确';
} else {
//用户输入验证码错误
return '验证码输入错误';
}
}
注意:这里我使用的是laravel5.5,所以没有问题,在学习过程中,发现如果你的版本是laravel5.2的话,这时候session设置是不成功的
解决方法:
在app\Http\Kernel.php文件的$middleware中加上如下代码即可:
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Cookie\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,