请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

多应用下的middleware.php文件开启session

老师,您看我这么理解对不对。
因为之前使用的是系统自带的获取验证码方式,也就是下面这一段

<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;
    }

正在回答 回答被采纳积分+3

3回答

慕的地8283736 2020-03-16 20:52:54

我也有疑问,然后你把那个 == Index让他没登陆别拦截就行了,!=  Login 就不行。https://img1.sycdn.imooc.com//szimg/5e6f767d09312b0716880891.jpg

0 回复 有任何疑惑可以回复我~
球球789 2020-01-14 10:12:48

多应用下session失效导致登录问题,一步解决:
app\middleware.php中 第9行前的双斜杠去掉,使之生效即可

0 回复 有任何疑惑可以回复我~
帅气的狗头 2019-12-29 12:46:50

目前能想到的原因,应该是调用扩展 tp-captcha 中的 CaptchaController 生成验证码图片时,未开启 session,导致 验证key 未写入到 session,所以在 admin 模块下使用 captcha_check() 一直未 false, 输出 session 中 captcha 也为空, 你品品

0 回复 有任何疑惑可以回复我~
  • 提问者 活着smile #1
    好像不是吧,我在admin下面的middleware.php中间件中已经开启了session,而且我尝试这在中间件中输出了一个值$a,然后在加载登录页面的方法login/index中也输出了一个值$b,最后得到的输出结果顺序是$a、$b。这就是说明在加载登录页面之前,已经走了中间件
    回复 有任何疑惑可以回复我~ 2019-12-29 16:36:23
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信