diff --git a/src/app/platform/controller/Login.php b/src/app/platform/controller/Login.php index b33f07fdd..7f51586f3 100644 --- a/src/app/platform/controller/Login.php +++ b/src/app/platform/controller/Login.php @@ -105,11 +105,7 @@ class Login extends Controller $expire = 600; try { - // 尝试使用版本3.x的方式 - $captchaInstance = new \think\captcha\Captcha(app()->make('config'), app()->make('session')); - $captchaInstance->configure(); - $generator = $captchaInstance->generate(); - $code = $generator['value']; + // 直接使用门面生成验证码图片 $captchaResponse = ThinkCaptcha::create(); // 获取图片内容 @@ -118,11 +114,31 @@ class Login extends Controller $imgContent = ob_get_clean(); // 生成base64图片 $imgBase64 = 'data:image/png;base64,' . base64_encode($imgContent); + + // 获取当前session中的验证码 + $session = app()->make('session'); + $captchaInfo = $session->get('captcha'); + + // 由于无法直接获取验证码文本,我们需要重新生成一个验证码实例 + // 并使用相同的配置来生成验证码文本 + $captchaInstance = new \think\captcha\Captcha(app()->make('config'), $session); + // 反射获取受保护的generate方法 + $reflection = new \ReflectionClass($captchaInstance); + $generateMethod = $reflection->getMethod('generate'); + $generateMethod->setAccessible(true); + $generator = $generateMethod->invoke($captchaInstance); + $code = $generator['value']; + } catch (\Exception $e) { - // 如果失败,尝试使用版本2.x的方式 - $captchaData = ThinkCaptcha::create(null, true); - $code = $captchaData['code']; - $imgBase64 = $captchaData['img']; + try { + // 如果失败,尝试使用版本2.x的方式 + $captchaData = ThinkCaptcha::create(null, true); + $code = $captchaData['code']; + $imgBase64 = $captchaData['img']; + } catch (\Exception $e2) { + // 如果都失败,返回错误信息 + return error(-1, '验证码生成失败: ' . $e2->getMessage()); + } } Cache::set($captcha_id, $code, $expire);