在多应用下验证码 captcha_check($captcha)失败处理。

验证失败原因:

1.在直接调用验证码生成方法的时候生成验证码的地址是/captcha,在非多应用的下使用验证码自带的验证函数是没有问题的。如果涉及到多应用在多应用中新增middleware.php在里面需要开启sessioninit::class。

app/admin/middleware.php

<?php
// 全局中间件定义文件
return [
    // 全局请求缓存
//     \think\middleware\CheckRequestCache::class,
    // 多语言加载
    // \think\middleware\LoadLangPack::class,
    // Session初始化
     \think\middleware\SessionInit::class
];

2.新增后验证码仍然会验证失败,失败的原因在于验证码调用地址/captcha,这个地址会去加载根目录下的app/middleware.php,那么就加载不到admin模块下的SessionInit 也就开启不了模块中的session。解决方法:在应用下新建控制器Captcha,所有admin模块下的控制器只要使用验证码都去调用Cpatcha方法中的verify(),对于使用强制路由的情况可以直接设置验证码专属路由,在要使用验证码的地方调用即可。

app/admin/controller/Captcha.php

<?php
/**
 * End file Captcha.php
 */

namespace app\admin\controller;

use app\BaseController;
use think\captcha\facade\Captcha as captchaMain;

class Captcha extends BaseController
{
    /**
     *  生成验证码
     *
     * @method  verify
     * @return  \think\Response
     *
     * @author  xiangyang <827544120@qq.com>
     */
    public function verify()
    {
        return captchaMain::create('admin');
    }
}

3.页面使用

<div class="admin-captcha">
   <img src="/admin/captcha" alt="captcha"  onclick="this.src='/admin/captcha?'+Math.random();" />
</div>
最后修改:2022 年 05 月 10 日
如果觉得我的文章对你有用,请随意赞赏