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));
    }
自己封装使用的demo

https://github.com/Youngyezi/captcha

posted @ 2019-10-30 15:34  牛奔  阅读(1254)  评论(0编辑  收藏  举报