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],codeimplode(,$text),imgdata:image/png;base64,.base64_encode($content),];}1.2 修改155行增加参数$uuid修改 $key判断$keyempty($uuid)?$this-session-get(captcha.key):$uuid;完整代码如下publicfunctioncheck(string$code,string$uuid):bool{if(!$this-session-has(captcha)){returnfalse;}$keyempty($uuid)?$this-session-get(captcha.key):$uuid;$codemb_strtolower($code,UTF-8);$respassword_verify($code,$key);if($res){$this-session-delete(captcha);}return$res;}2. controller具体实现/** * 验证码图片接口返回JSON base64 uuid * return Json */publicfunctioncaptchaImage():Json{$captchaCaptcha::create();$imgBase64$captcha[img];$imgstr_replace(data:image/png;base64,,,$imgBase64);returnjson([msg操作成功,img$img,code200,captchaEnabledtrue,uuid$captcha[key]]);}publicfunctionlogin():Json{$params$this-request-param();if(!Captcha::check($params[code],$params[uuid])){returnAjaxUtils::error(验证码错误);}$result(newSysUserModel())-login($params);returnjson($result);}