Lumen 实现接口 Captcha图片验证码功能
安装
composer require youngyezi/captcha
使用
新版的包已经删除了 session 支持,完全交给业务自由选择存储方式
个人觉得这样更方便来解耦业务,尤其 Lumen 大多时候用来做 Api 开发,并不需要开启 Session 服务
注册服务 bootstrap\app.php
$app->register(Youngyezi\Captcha\CaptchaServiceProvider::class); // 添加别名 $app->alias('captcha', 'Youngyezi\Captcha\CaptchaServiceProvider');
配置文件
复制 vendor\Youngyezi\Captcha\config\captcha.php 文件至 项目 config 文件下
For Example
验证码生成
// 创建验证码 // 配置文件 key($config) // 返回值包括一个base_64加密的图片和一个key $data = app('captcha')->create(); // 自定义储存 key (如 redis ,session 等) .... // 返回验证码图片 img
生成的base64可以用这个站点转换 站点链接
验证码校验
// 通过 code 和 key 来校验 $captcha = $request->input('captcha'); // 获取自定义存储的 key 值 $key = { ... }; if(app('captcha')->check($captcha, $key) === false) { //校验失败 }
/* * 用户注册 */ public function register() { $input = Input::get(); if(!isset($input['username']) || empty($input['username']) || !isset($input['iponenumber']) || empty($input['iponenumber']) || !isset($input['password']) || empty($input['password']) || !isset($input['key']) || empty($input['key']) || !isset($input['captcha']) || empty($input['captcha']) ){ return response()->json(['code'=>3,'msg'=>'参数缺失']); } if(!$this->check($input['key'],$input['captcha'])){ return response()->json(['code'=>20000,'msg'=>'输入验证码错误']); } if(DB::table('user')->where('iponenumber',$input['iponenumber'])->first()){ return response()->json(['code'=>20001,'msg'=>'手机号已注册']); } $insert = DB::table('user')->insert(['username'=>htmlspecialchars($input['username']),'iponenumber'=>$input['iponenumber'],'password'=>Hash::make($input['password'])]); if($insert){ return response()->json(['code'=>0,'msg'=>'注册成功']); }else{ return response()->json(['code'=>20002,'msg'=>'注册失败']); } } /* * 图片验证码 * 返回值包括一个base_64加密的图片和一个key */ public function captchaInfo() { $result = app('captcha')->create(); Cache::put($result['key'],$result['key'],60); if(isset($result['sensitive'])){ unset($result['sensitive']); } return response()->json(['code'=>0,'msg'=>'成功','data'=>$result]); } /** * @params key,captcha * 两个参数key和验证码 */ private function check($key,$captcha) { return app('captcha')->check(strtolower($captcha),Cache::get($key)); }