您现在的位置是:网站首页>>PHP>>laravel

laravel 使用mews/captcha拓展包实现验证码的生成与验证

发布时间:2018-12-20 14:03:23作者:wangjian浏览量:1133点赞量:0

    一:安装mews/captcha拓展包

    mews/captcha 是一个非常易于集成的图片验证码扩展包,使用此扩展包可以分分钟给你的网站加上验证码功能,mews/captcha拓展包地址:https://github.com/mewebstudio/captcha

    注意:在Windows中,您的php.ini中需要包含php_gd2.dll,php_fileinfo.dll,php_mbstring.dll以满足mews/captcha依赖性的要求

    composer require mews/captcha

    二:生成验证码配置文件

    执行

    php artisan vendor:publish --provider="Mews\Captcha\CaptchaServiceProvider"

    这时候会在config目录下生成一个captcha.php的验证码配置文件

    <?php
    return [
        'characters' => '2346789abcdefghjmnpqrtuxyzABCDEFGHJMNPQRTUXYZ',
        'default'   => [
            'length'    => 5,
            'width'     => 120,
            'height'    => 36,
            'quality'   => 90,
        ],
        'flat'   => [
            'length'    => 6,
            'width'     => 160,
            'height'    => 46,
            'quality'   => 90,
            'lines'     => 6,
            'bgImage'   => false,
            'bgColor'   => '#ecf2f4',
            'fontColors'=> ['#2c3e50', '#c0392b', '#16a085', '#c0392b', '#8e44ad', '#303f9f', '#f57c00', '#795548'],
            'contrast'  => -5,
        ],
        'mini'   => [
            'length'    => 3,
            'width'     => 60,
            'height'    => 32,
        ],
        'inverse'   => [
            'length'    => 5,
            'width'     => 120,
            'height'    => 36,
            'quality'   => 90,
            'sensitive' => true,
            'angle'     => 12,
            'sharpen'   => 10,
            'blur'      => 2,
            'invert'    => true,
            'contrast'  => -5,
        ]
    ];

    三:生成验证码

    mews/captcha拓展包提供了两个函数用于生成并展示验证码

    1:返回 img 格式的验证码(生成的是一个包含验证码的img标签)

    captcha_img();//使用默认的验证码配置生成验证码并返回img格式
    captcha_img('flat');//使用指定的验证码配置生成验证码并返回img格式

    在html中调用:

    {!! captcha_img() !!}

    也可以在php端直接调用在传到前端

    2:返回验证码的 url 地址

    captcha_src();//使用默认的验证码配置生成验证码并返回url格式
    captcha_src('flat');//使用指定的验证码配置生成验证码并返回url格式

    html中调用:

    {{captcha_src()}}

    也可以在php端直接调用在传到前端

    3:验证码生成并展示的完整展示:

    <form name="form" action="/check" method="post">
        <img src="{{ captcha_src('flat') }}" onclick="this.src='/captcha/flat?'+Math.random()" title="点击图片重新获取验证码">
        <input type="text" name="captcha">
        {{csrf_field()}}
        @if($errors->has('captcha'))
            <span>{{$errors->first('captcha')}}</span>
        @endif
        <input type="submit" value="验证"/>
    </form>

    四:验证码验证

    1:使用验证码规则验证

    public function check(Request $request)
    {
        $data = $request->all();
        $rules = [
            'captcha' => 'required|captcha',//required表示必填 captcha表示进行验证码验证
        ];
        // 自定义消息
        $messages = [
            'captcha.required' => '请输入验证码',
            'captcha.captcha' => '请输入正确验证码',
        ];
        //对验证码字段进行验证
        $validator = \Validator::make($data, $rules, $messages);
        if($validator->passes()){
            //验证通过
        }else{
            //验证失败
            //$validator->errors() 获取错误信息
            //返回上个页面并将错误信息返回到页面上
            return back()->withErrors($validator);
        }
        
    }

    2:直接使用拓展包的captcha_check函数验证

    public function check(Request $request)
    {
        $data = $request->all();
        //对验证码进行验证,验证通过返回true,失败返回false
        $capt = captcha_check($data['captcha']);
        if($capt){
            //验证成功
        }else{
            //验证失败
        }
    }

    通过上面的学习,验证码实现成功

    image.png

0 +1