美文网首页Chiawei的编程技术专辑
ThinkPHP5整合图形点击验证码

ThinkPHP5整合图形点击验证码

作者: ymfsder | 来源:发表于2018-08-01 17:24 被阅读0次

    根据工作上的要求,更改系统登录的验证码的形式,之前考虑滑动验证,最后决定采用点击字体验证的方式,采用的是代码小睿上传在码云的 clicaptcha 项目

    环境

    thinkphp 5

    流程

    1. 导入css js image font

    下载源码后将css、js、image、font导入到thinkphp的public目录下对应的文件夹下。

    js: clicaptcha.js、jquery-1.8.3.min.js。

    css:captcha.css 、main.css

    font: SourceHanSansCN-Normal.otf

    image: 1.jpg、2.jpg、3.jpg、refresh.png

    其中1.jpg、2.jpg、3.jpg是背景图

    2.导入、修改clicaptcha.class.php

    1. 将该文件存放在thinkPHP的extend目录中
    2. 需要修改一下地方
      1. 注释第5行的session_start(),因为系统中已经开启了session.
      2. 修改第9行的图片路径 ,将“image/1.jpg”修改为“./public/image/1.jpg”,具体根据文件的相对路径来决定。
      3. 修改11行的字体路径,将“/public/fonts/SourceHanSansCN-Normal.otf” 改为“/public/fonts/SourceHanSansCN-Normal.otf”
      4. 122的“msubstr”函数名改为"my_msubstr",因为系统中之前已经存在这个函数了。这里会冲突,同时将139行的函数名,同步一下。

    3.编写controller

    clicaptcha.php 是整个项目的控制器这里你需要集成到系统的控制器中,这里我将整个clicaptcha.php 简化成一个方法,存放在admin 模块的Index控制器中。

    public function clickver(){
            import('clicaptcha', EXTEND_PATH,'.class.php');
            $clicaptcha = new \clicaptcha();
            if($_POST['do'] == 'check'){
                echo $clicaptcha->check($_POST['info'], false) ? 1 : 0;
            }else{
                $clicaptcha->creat();
            }
        }
    

    4.页面中调用。

    1. 表单代码。
    <form role="form" action="/admin/index/login.php" method="post" id="login_form">
        <input id="username" type="text" placeholder="用户名" name="username" class="user"
                   onfocus="if(placeholder=='请输入用户名') {placeholder=''}"
                   onblur="if (value=='') {placeholder='请输入用户名'}">
        <input id="password" type="password" placeholder="密码" name="password" class="pw"
                   onfocus="if(placeholder=='请输入密码') {placeholder=''}"
                   onblur="if (value=='') {placeholder='请输入密码'}">
        <button id="sub" class="lbutton" type="button">登录</button>
        <div class="warn" id="sx8"></div>
        <input type="hidden" id="clicaptcha-submit-info" name="clicaptcha-submit-info">
    </form>
    
    1. js代码。
    $(function () {
        $('#sub').click(function () {
            $('#clicaptcha-submit-info').clicaptcha({
                src: '/admin/index/clickver',//根据自己的路径进行配置
                callback: function () {
                    var con = $("#password").val();//加密密码
                    var arr = con.split('d2FuZ2');
                    if (arr.length > 1) {
                        // return true;
                    } else {
                        var a = $.base64.encode($("#password").val()) + $.base64.encode("wangcwxinyang") + "ks";
                        $("#password").val(a);
                    }
                    $("#login_form").submit();
                }
            });
        });
    });
    

    需要注意的是这里面的id需要一一对应不然容易出现问题。同时对登陆做了验证的系统,需要将clickver添加到系统的验证规则之中,不然验证码无法加载。

    结束语

    非常感谢代码小睿提供的代码

    相关文章

      网友评论

        本文标题:ThinkPHP5整合图形点击验证码

        本文链接:https://www.haomeiwen.com/subject/ldmrvftx.html