[mews/captcha]
扩展GitHub地址: https://github.com/mewebstudio/captcha
前期准备与说明
在laravel 中使用此扩展,正常的用法是通过session来保存与验证用户输入的验证码是否正确,但我目前的项目是前后台彻底分离的。前台使用vue框架来搭建,后台用laravel来做api后台的接口。前后台通过jwt来标识用户。所以没法使用session来使用这个扩展,百度了好久,无用,最终还是在官方论坛找到解决方案,在此贴出方案,以便后来人查阅
-
在laravel中引入此扩展【我的框架版本laravel5.5】
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下,配置验证码
return [
'characters' => '2346789abcdefghjmnpqrtuxyzABCDEFGHJMNPQRTUXYZ','default' => [ 'length' => 9, 'width' => 120, 'height' => 36, 'quality' => 90, 'math' => true, ], 'flat' => [ 'length' => 6, 'width' => 160, 'height' => 46, 'quality' => 90, 'lines' => 6, 'bgImage' => false, 'bgColor' => '#ecf2f4', 'fontColors'=> ['#2c3e50', '#c0392b', '#16a085', '#c0392b', '#8e44ad', '#303f9f', '#f57c00', '#795548'], 'contrast' => -5, ], 'mini' => [ 'length' => 3, 'width' => 60, 'height' => 32, ], 'inverse' => [ 'length' => 5, 'width' => 120, 'height' => 36, 'quality' => 90, 'sensitive' => true, 'angle' => 12, 'sharpen' => 10, 'blur' => 2, 'invert' => true, 'contrast' => -5, ]
];
正文开始
因为正常用session的使用方案比较简单,在此不赘述。
下面放上通过api来验证的前后端的关键代码
-
PHP返回验证码
// 路由 Route::get('GetCaptchaImg','UserController@GetCaptchaImg')->name("GetCaptchaImg"); // 代码 public function GetCaptchaImg(Request $request){ return app('captcha')->create('inverse', true); } 说明:这里返回的url.img是base64后的图片,可直接放入img标签中的src属性中。key值是与图片绑定的数值,之后需传给后台验证。
-
PHP关键验证代码
// 路由 Route::post('CheckCaptcha','UserController@CheckCaptcha')->name("CheckCaptcha"); // 代码 public function CheckCaptcha(Request $request){ $key = $this->FormCheck->isEmpty($request->key,'验证码key'); if (!$key->code) { return result($key->msg); } $captcha = $this->FormCheck->isEmpty($request->captcha,'验证码'); if (!$captcha->code) { return result($captcha->msg); } if (!captcha_api_check($request->captcha, $request->key)){ return $this->Resources('验证失败', 0, []); } return $this->Resources('验证成功', 1, []); }
-
验证结果