当前位置: 代码迷 >> 综合 >> thinkphp6 验证码(配置,验证一直不通过,验证码不显示)
  详细解决方案

thinkphp6 验证码(配置,验证一直不通过,验证码不显示)

热度:17   发布时间:2023-11-21 21:47:27.0

最近接触到thinkphp6的RC3版本,验证码都搞了我好长一段时间。

1、关于这个版本验证码的配置,官方文档中详细说明了,如果使用扩展内置的方法进行验证码显示,直接在应用的config目录下面的captcha.php文件(没有则首先创建)中进行设置即可,以下设置方式仅限于独立调用Captcha类的时候使用。所以我在config下自己创建了一个配置文件,需要的配置可参照文档自行配置:

配置完成后,在页面输出代码如下:

这里需要说明一下,有时候可能不能出现验证码图片,此时请在谷歌调试模式下查看验证码图片的生成路径,也可以将此路径粘贴于浏览器中进行访问,可以查看哪一步出现错误,我这里因为路径的问题,一开始并没有显示出来,于是我自己手动修改了源文件 think-captcha/helper.php中的captcha_img方法,下面圈出来的地方即为修改的地方:

2、关于验证,因为tp6的这个版本默认是不开启session的,所以需要我们自己开启,不然验证的时候是取不到session的。这里说明一下,如果是部分文件需要session,那么就在需要使用的控制器中单独引入(如下),这里我所有文件都需要引入,打开app/middleware.php文件,将\think\middleware\SessionInit::class 注释去掉就可以了

use think\facade\Session;
use think\middleware\SessionInit;

3、2022-10-23日补充:线上的验证码一直用的好好的,昨天更新了一个插件,不晓得是动到哪根命脉了,死活不显示,时间匆忙,等不及找错,于是我参考官网换了一种写法

//控制器创建方法
<?php
namespace app\admin\controller;
use think\captcha\facade\Captcha;  //引入它class Login
{//创建验证码public function zcaptcha(){$captcha = new Captcha();return $captcha::create();}//登录验证public function loginCheck(){$input = Request::param();       //数据验证     $validate = new Validate;$validate->rule(['username|用户名'  => 'require','password|密码' => 'require','captcha|验证码' => 'require']);//验证码的验证$captcha = new Captcha();if(!$captcha::check($input['captcha'])){return json(['info'=>'验证码错误','status'=>0]); }          if(!$validate->check($input)){//打印错误规则,并返回页面return json(['info'=>$validate->getError(),'status'=>0]); }//......}}
?>
//html界面
<!-- 其他的省略 -->
<input type="text" name="captcha" lay-verify="required" placeholder="验证码(点击图片换一张)" class="layui-input" style="width:210px;float:left;">
<div style="float:left;margin:3px;"><img src="{:url('login/zcaptcha')}" alt="captcha" id="captcha" onclick="changeCaptcha()" /></div>//js
<script type="text/javascript">//更新验证码function changeCaptcha(){var src = "{:url('login/zcaptcha')}?a=" + Math.random();$("#captcha").attr('src',src); //更新图片}//提交表单     layui.use('form', function(){var form = layui.form;//监听提交form.on('submit(login)', function(data){             $.ajax({type: "post",data: data.field,          url: "xxxxxxxxxxxxxxxxx",dataType: "json",asyn: false,success:function(res){                if(res.status == 1){layer.msg(res.info,{time:1000,icon:6,end:function(){window.location.href = res.url;}});                    }else{layer.msg(res.info,{icon:5});changeCaptcha();   //这里一旦有错误输出就刷新一次验证码return false; }},error:function(request){                   layer.msg('系统错误',{icon:5});changeCaptcha();   //这里一旦有错误输出就刷新一次验证码return false; }});return false; //阻止表单跳转              });});        
</script>