Thinkphp8 验证码: 修改支持前后端分离验证
2026/5/11 2:31:56 网站建设 项目流程

因前后端分离,跨域获取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);}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询