Thinkphp8 验证码: 修改支持前后端分离验证

📅 2026/7/8 9:25:04 👁️ 阅读次数 📝 编程学习
Thinkphp8 验证码: 修改支持前后端分离验证

因前后端分离,跨域获取PHPSESSID较麻烦,通过增加uuid进行前后端简单关联。

1 修改vendor/topthink/think-captcha/src/Captcha.php文件

1.1 修改242行,增加返回 ‘key’ => $generator[‘key’]

// API调用模式if($this->api){return['key'=>$generator['key'],'code'=>implode('',$text),'img'=>'data:image/png;base64,'.base64_encode($content),];}

1.2 修改155行,增加参数$uuid,修改 $key判断

$key=empty($uuid)?$this->session->get('captcha.key'):$uuid;

完整代码如下:

publicfunctioncheck(string$code,string$uuid):bool{if(!$this->session->has('captcha')){returnfalse;}$key=empty($uuid)?$this->session->get('captcha.key'):$uuid;$code=mb_strtolower($code,'UTF-8');$res=password_verify($code,$key);if($res){$this->session->delete('captcha');}return$res;}

2. controller具体实现

/** * 验证码图片接口(返回JSON + base64 + uuid) * @return Json */publicfunctioncaptchaImage():Json{$captcha=Captcha::create();$imgBase64=$captcha['img'];$img=str_replace('data:image/png;base64,','',$imgBase64);returnjson(["msg"=>"操作成功","img"=>$img,"code"=>200,"captchaEnabled"=>true,"uuid"=>$captcha['key']]);}publicfunctionlogin():Json{$params=$this->request->param();if(!Captcha::check($params['code'],$params['uuid'])){returnAjaxUtils::error("验证码错误");}$result=(newSysUserModel())->login($params);returnjson($result);}