在多应用下验证码 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>
1 条评论
生成验证码