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

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

发布时间:2018-12-20 16:56:48作者:wangjian浏览量:681点赞量:0

    :安装gregwar/captcha拓展包

    composer require gregwar/captcha

    二:生成验证码并展示

    1:生成验证码方法

    public function captchaShow()
    {
        //生成验证码图片的Builder对象,配置相应属性
        $builder = new CaptchaBuilder();
        // 设置背景颜色
        $builder->setBackgroundColor(220, 210, 230);
        $builder->setMaxAngle(25);
        $builder->setMaxBehindLines(0);
        $builder->setMaxFrontLines(0);
        //可以设置图片宽高及字体
        $builder->build($width = 250, $height = 70, $font = null);
        //获取验证码的内容
        $phrase = $builder->getPhrase();
        //把内容存入session
        session(['phrase'=>$phrase]);
        //生成图片
        header("Cache-Control: no-cache, must-revalidate");
        header('Content-Type: image/jpeg');
        $builder->output();
    }

    将captchaShow方法进行路由配置,这里我配置的是:

    Route::get('/captchaShow', 'Test\CaptController@captchaShow');

    2:在页面时展示验证码

    在html中:

    <form name="form" action="/checkCapt" method="post">
        <img src="/captchaShow" onclick="this.src='/captchaShow?'+Math.random()" title="点击图片重新获取验证码">
        <input type="text" name="captcha">
        {{csrf_field()}}
        <input type="submit" value="验证"/>
    </form>

    三:验证

    public function checkCapt(Request $request)
    {
        $data = $request->all();
        if (session('phrase') == $data['captcha']) {
            //用户输入验证码正确
            //清除session
            session()->forget('phrase');
            return '验证码正确';
        } else {
            //用户输入验证码错误
            return '验证码输入错误';
        }
    }

    注意:这里我使用的是laravel5.5,所以没有问题,在学习过程中,发现如果你的版本是laravel5.2的话,这时候session设置是不成功的

    解决方法:

    在app\Http\Kernel.php文件的$middleware中加上如下代码即可:

    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Cookie\Middleware\EncryptCookies::class,
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,


0 +1