laravel 图片验证码

  参考网址: https://learnku.com/articles/6736/laravel-code-captcha

 php:

composer 安装:composer require mews/captcha
2:
注册providers (config/app.php) ,在这个数组中的最后追加如下代码: Mews\Captcha\CaptchaServiceProvider::class,

 

 3:

注册aliases (config/app.php),在这个数组中的最后追加如下代码:
'Captcha' => Mews\Captcha\Facades\Captcha::class,

 

 4:

生成配置文件,在 Composer 命令行中输入如下命令:
php artisan vendor:publish

5:

进入config/captcha.php 文件,修改default 数组 可以对验证码进行样式、数量、大小上的修改。
'default'   => [
'length'    => 5,
'width'     => 100,
'height'    => 34,
'quality'   => 90,
],

6:

页面中使用
<div class="row">
    <div class="col-md-8">
        <input type="text" class="form-control {{$errors->has('captcha')?'parsley-error':''}}" name="captcha" placeholder="captcha">
    </div>
    <div class="col-md-4">
        <img src="{{captcha_src()}}" style="cursor: pointer" onclick="this.src='{{captcha_src()}}'+Math.random()">
    </div>
    @if($errors->has('captcha'))
        <div class="col-md-12">
            <p class="text-danger text-left"><strong>{{$errors->first('captcha')}}</strong></p>
        </div>
    @endif
</div>

7:

点击图片刷新,如下代码:
<img src="{{captcha_src()}}" style="cursor: pointer" onclick="this.src='{{captcha_src()}}'+Math.random()">

8:

重写 AuthController 登录验证方法,并自定义提示信息:

首先要引入如下代码:
use Illuminate\Http\Request;

重写 validateLogin 方法:
protected function validateLogin(Request $request){
        $this->validate($request, [
            $this->loginUsername() => 'required',
            'password' => 'required',
            'captcha' => 'required|captcha',
        ],[
            'captcha.required' => trans('validation.required'),
            'captcha.captcha' => trans('validation.captcha'),
        ]);
    }

9:

字体库的下载与切换:
首先需要下载字体库
下载完成后,将压缩包中 src/zh-CN 文件夹拷贝到项目目录的 resources/lang 文件夹下。
修改 config->app.php 文件,修改代码如下:
'locale' => 'zh-CN',
由于captcha在中文包中没有中文解释,所以需要手动添加中文解释,具体操作如下:
打开 resources/zh-CN/validation.php,在总数组中追加如下键值对:
'captcha'                  => ':attribute 不正确。',
在 attributes 数组中追加如下键值对:
'captcha'               => '验证码',

效果图:

 

 HTML代码:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <meta name="renderer" content="webkit|ie-comp|ie-stand">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
    <meta http-equiv="Cache-Control" content="no-siteapp" />
    <!--[if lt IE 9]>
    <script type="text/javascript" src="/static/lib/html5shiv.js"></script>
    <script type="text/javascript" src="/static/lib/respond.min.js"></script>
    <![endif]-->
    <link href="/static/static/h-ui/css/H-ui.min.css" rel="stylesheet" type="text/css" />
    <link href="/static/static/h-ui.admin/css/H-ui.login.css" rel="stylesheet" type="text/css" />
    <link href="/static/static/h-ui.admin/css/style.css" rel="stylesheet" type="text/css" />
    <link href="/static/lib/Hui-iconfont/1.0.8/iconfont.css" rel="stylesheet" type="text/css" />
    <link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.3.0/css/bootstrap.min.css">
    <!--[if IE 6]>
    <script type="text/javascript" src="/static/lib/DD_belatedPNG_0.0.8a-min.js" ></script>

    <script>DD_belatedPNG.fix('*');</script>
    <![endif]-->
    <title>后台登录 - H-ui.admin v3.1</title>
    <meta name="keywords" content="H-ui.admin v3.1,H-ui网站后台模版,后台模版下载,后台管理系统模版,HTML后台模版下载">
    <meta name="description" content="H-ui.admin v3.1,是一款由国人开发的轻量级扁平化网站后台模板,完全免费开源的网站后台管理系统模版,适合中小型CMS后台系统。">
</head>
<body>
<input type="hidden" id="TenantId" name="TenantId" value="" />
<div class="header"></div>
<div class="loginWraper">
    <div id="loginform" class="loginBox">
        <form class="form form-horizontal" action="{{url('exam3/dologin')}}" method="post">
            <div class="row cl">
                <label class="form-label col-xs-3"><i class="Hui-iconfont">&#xe60d;</i></label>
                <div class="formControls col-xs-8">
                    <input id="username" name="username" type="text" placeholder="账户" class="input-text size-L">
                </div>
            </div>
            <div class="row cl">
                <label class="form-label col-xs-3"><i class="Hui-iconfont">&#xe60e;</i></label>
                <div class="formControls col-xs-8">
                    <input id="password" name="password" type="password" placeholder="密码" class="input-text size-L">
                </div>
            </div>
            <div class="row cl">
                <div class="col-md-8">
                    <label class="form-label col-xs-3"><i class="Hui-iconfont">&#xe60e;</i></label>
{{--                    <input class="input-text size-L" type="text" placeholder="验证码" onblur="if(this.value==''){this.value='验证码:'}" onclick="if(this.value=='验证码:'){this.value='';}" value="验证码:" style="width:150px;">--}}
                    <input type="text"  style="width: 200px" class="form-control {{$errors->has('captcha')?'parsley-error':''}}" name="captcha" id="captcha" placeholder="验证码">
                </div>
                <div class="col-md-4">
                    <img src="{{captcha_src()}}" style="cursor: pointer" onclick="this.src='{{captcha_src()}}'+Math.random()">
                </div>
                @if($errors->has('captcha'))
                    <div class="col-md-12">
                        <p class="text-danger text-left"><strong>{{$errors->first('captcha')}}</strong></p>
                    </div>
                @endif
            </div>
            <div class="row cl">
                <div class="formControls col-xs-8 col-xs-offset-3">
                    <label for="online">
                        <input type="checkbox"  name="online" id="online" value="">
                        使我保持登录状态</label>
                </div>
            </div>
            <div class="row cl">
                <div class="formControls col-xs-8 col-xs-offset-3">
                    <input name="" id="login" type="button" class="btn btn-success radius size-L" value="&nbsp;登&nbsp;&nbsp;&nbsp;&nbsp;录&nbsp;">
                    <input name="" type="reset" class="btn btn-default radius size-L" value="&nbsp;取&nbsp;&nbsp;&nbsp;&nbsp;消&nbsp;">
                </div>
            </div>
        </form>
    </div>
</div>
<div class="footer">Copyright 你的公司名称 by H-ui.admin v3.1</div>
<script type="text/javascript" src="/static/lib/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="/static/static/h-ui/js/H-ui.min.js"></script>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
</script>
<script>

{{--    登录--}}
    $('#login').click(function () {
        //获取用户名的值
        var username=$('#username').val();
        //获取密码的值
        var password=$('#password').val();
        //验证码的值
        var captcha=$('#captcha').val();
        //发送Ajax
        $.ajax({
            type: 'POST',
            url: '/exam3/dologin',
            data: {
                username: username,
                password: password,
                captcha: captcha,
            },
            dataType: 'json',
            success: function (res) {
                // console.log(res);
                if (res.code==500){
                    alert(res.msg)
                    // layer.meg(res.msg)
                }
                if (res.code==501){
                    alert(res.msg)
                }
                if (res.code==502){
                    alert(res.msg)
                }
                if (res.code==200){
                    alert(res.msg)
                    location.href='/echarts'
                }

            },

        });

    })


</script>

</body>
</html>

控制器代码:

<?php

namespace App\Http\Controllers\exam3;

use App\Http\Controllers\Controller;
use App\Models\Admin;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;;
class ExamController extends Controller
{
    //展示登录页面
    public function login(){
        return view('exam3.login');
    }
//    处理登录
    public function doLogin(Request $request){

        $params=$request->post();
//        验证
        $validator=Validator::make($request->all(),[
            'username'=>'required',
            'password'=>'required',
            'captcha' => 'required|captcha'
        ],[
            'username.required'=>'用户名不可以为空',
            'password.required'=>'密码不可以为空',
            'captcha.required'=>'验证码不可以为空',
            'captcha.captcha'=>'验证码输入错误',
        ]);
        if ($validator->fails()){
            return ['code'=>500,'msg'=>$validator->errors()->first()];
        }
//        匹配数据库
        $res=Admin::login($params);
//       验证账号和密码
        if ($res['username']!==$params['username']){
            return ['code'=>501,'msg'=>'账号错误','data'=>''];
//            return redirect(url('exam3/login'))->withErrors(['error'=>'账号错误']);
        }elseif ($res['password']!==$params['password']){
            return ['code'=>502,'msg'=>'密码错误','data'=>''];
//            return redirect(url('exam3/login'))->withErrors(['error'=>'密码错误']);
        }else{
//           记录session通过put方法
            $request->session()->put('username', $res['username']);
//验证成功跳转首页
            return ['code'=>200,'msg'=>'登录成功','data'=>''];
//            return redirect(url('echarts'))->with('success','登录成功');
        }

    }

}

模型代码:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Admin extends Model
{
    //
    //验证数据
    public static function login($params)
    {
//验证账号
        return self::where('username',$params['username'])
            ->first();
    }
}

路由:

Route::group(['namespace'=>'exam3'],function (){
//    登录
    Route::get('exam3/login','ExamController@login');
//处理登录
    Route::post('exam3/dologin','ExamController@doLogin');

});

处理视图干扰线,以下是文件路径

 

D:\phpstudy_pro\WWW\laravels\vendor\mews\captcha\src

 

 

posted @ 2021-08-11 09:27  王越666  阅读(264)  评论(0编辑  收藏  举报