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

57 篇文章 1 订阅
21 篇文章 2 订阅

最近接触到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>  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值