本人感觉用的比较好的验证码包,拿出来分享一下,傻瓜式教程,大佬别喷。
用户登陆注册,不管前台后台,为了安全性还是需要加入手机短信或图形验证码的,这样安全性会好很多
因为不同的需求,我们可以返回图片、网址、HTML,根据前端需求来返回相应的数据
首先要引入图片验证码的composer包
github地址:https://github.com/mewebstudio/captcha
安装captcha:
composer require mews/captcha
找到config/app.php下的providers,添加如下代码
\Mews\Captcha\CaptchaServiceProvider::class,
找到config/app.php下的aliases``,添加如下代码
'Captcha' => Mews\Captcha\Facades\Captcha::class,
引入配置文件,选择相应的包
php artisan vendor:publish
则生成config/captcha.php
配置文件中的代码:例如长宽,flat配置等,个人觉得使用默认配置吧,也没什么问题。
Return URL
captcha_src();
Captcha::src();
Return HTML
captcha_img();
Captcha::img();
To use different configurations
captcha_img('flat');
Captcha::img('inverse');
大家可以参考demo(demo为composer包自带的)
Route::any('captcha-test', function()
{
if (Request::getMethod() == 'POST')
{
$rules = ['captcha' => 'required|captcha'];
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails())
{
echo '<p style="color: #ff0000;">Incorrect!</p>';
}
else
{
echo '<p style="color: #00ff30;">Matched :)</p>';
}
}
$form = '<form method="post" action="captcha-test">';
$form .= '<input type="hidden" name="_token" value="' . csrf_token() . '">';
$form .= '<p>' . captcha_img() . '</p>';
$form .= '<p><input type="text" name="captcha"></p>';
$form .= '<p><button type="submit" name="check">Check</button></p>';
$form .= '</form>';
return $form;
});
本次项目用到的方法如下:
路由:get为获取图片验证码,post为验证验证码是否正确
Route::get('/captcha', 'AllController@captcha');
Route::post('/captcha/validate', 'AllController@captchaValidate');
控制器中的方法:获取图片验证码返回的是url,如果想返回img标签或者html,请看上面的方法
public function captcha()
{
$captcha['url'] = captcha_src();
return $this->responseData($captcha);
}
前端把验证码传过来进行验证
public function captchaValidate(Request $request)
{
$rules = ['captcha' => 'required|captcha'];
$validator = \Validator::make($request->all(), $rules);
if ($validator->fails()){
return $this->responseFailed('验证失败');
} else {
return $this->responseSuccess('验证成功');
}
}
如果一直返回验证失败,则需要在app/Http/Kernel.php中的$middleware加入以下信息
\Illuminate\Session\Middleware\StartSession::class
配上接口文档图片:
获取如下验证码
d6qfe
验证验证码是否正确