美文网首页
php api 图片验证码调用和验证(在thinkphp框架)

php api 图片验证码调用和验证(在thinkphp框架)

作者: xilong | 来源:发表于2021-05-09 18:25 被阅读0次

1、目标:通过api ajax获取图片验证码,然后判断验证码

因为thinkphp 官方的think-captcha扩展 不支持通过api调用的方式
我们选用了Gregwar/Captcha 作为 图片验证码插件

2、流程

前端调用api接口 ——> 后台生成 base64验证码图片、key、验证码文字 ——>返回给前端 base64图片和key

前端登录携带 key 和 验证码文字 ——> 后台通过key 找到验证码 和 前端发送的验证码比对判断

3、代码

// 1、composer 安装   gregwar/captcha: "^1.1"
composer require gregwar/captcha

//2、在controller 里面写一个 创建验证码函数
    public function getVerificationCode()
    {
        // 创建随机字符串函数
        function creatKey($length){
            $str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890';
            $randStr = str_shuffle($str);//打乱字符串
            $rands= substr($randStr,0,$length);  //substr(string,start,length);返回字符串的一部分
            return 'captcha'.$rands;
        }
        // 创建随机字符串key 
        $key = creatKey(15);
        // new 一个captcha
        $captcha = new CaptchaBuilder;
        $captcha->build();
        
        $result = [
            'key' => $key,                // key 
            'img' => $captcha->inline(),  //验证码 base64图片
        ];
        // thinkphp缓存存入 $captcha->getPhrase() 验证码文字 时间是180秒  (注意这里字段名是key!!!)
        Cache::set($key, $captcha->getPhrase(), 180);
        return  $result;
    }

// 3、登录 判断验证码
// $param['key']      用户携带的 key
// $param['captcha']  用户携带 的验证码文字
// Cache::get($param['key']) 从cache 中根据 key 获取 正确的验证码
// strcasecmp()  是php函数 可以忽略大小写 判断相等

$isEqual = strcasecmp($param['captcha'],Cache::get($param['key']));
if(!Cache::get($param['key'])){
    return '验证码已过期';   // cache存入 有180秒过期
}
if($isEqual != 0){
    return '验证码错误';
}

相关文章

网友评论

      本文标题:php api 图片验证码调用和验证(在thinkphp框架)

      本文链接:https://www.haomeiwen.com/subject/gdcvdltx.html