老师,您看我这么理解对不对。
因为之前使用的是系统自带的获取验证码方式,也就是下面这一段
<div class="admin-captcha">{:captcha_img()}</div>
想要让admin中的middleware.php文件生效,则需使用自己创建的创建验证码方法
即可
<div><img src="{:url('admin/captcha/captcha')}" alt="captcha" id="canvas" class="admin-captcha" width="90" height="40"/></div>
至于为什么在使用内置的验证码时,admin目录下的middleware.php开启\think\middleware\SessionInit::class
无效,据我实测,不是没有开启session,而是自带的判断验证码是否正确的方法中$res = password_verify($code, $key);
这一段代码验证密码是否和散列值匹配
返回了false,至于为什么还望老师解答!!!
public function check(string $code): bool
{
if (!$this->session->has('captcha')) {
return false;
}
$key = $this->session->get('captcha.key');
$code = mb_strtolower($code, 'UTF-8');
$res = password_verify($code, $key); //使用admin目录下的middleware.php时返回了false
if ($res) {
$this->session->delete('captcha');
}
return $res;
}