Laravel-5.1验证码mews captcha

Laravel-5.1 ---- 将mews captcha整合到项目中!

经过摸索,终于能在laravel 5.1中应用验证码了。

因为英语渣五水平,所以几乎没搜索到什么有用的,于是考虑在github上搜索验证码包!

提示: github上的package中往往会有使用说明,照着上面的实现,一般都能做出来。

 

我使用的是mews captcha

Git 上的地址:https://github.com/mewebstudio/captcha 上面的使用很详细了。

 

动手实现:

-- 手动进入 laravel 项目目录

 

-- 在对应目录下,找到composer.json文件,打开它,添加如下语句:

如图:添加语句

复制代码
{
    "require": {
        ....
        ....
        ....
        "mews/captcha": "~2.0"
    },
    "minimum-stability": "dev"
}    
复制代码

 

-- 执行composer update, 如果报错,请先执行composer self-update, 然后再执行 composer update, 还是不行就 composer install

 

-- 找到config/app.PHP打开,添加如下语句:

1.打开这个文件,找到providers项,添加如下语句

Mews\Captcha\CaptchaServiceProvider::class,

2.找到aliases项,添加如下语句:

添加语句:

'Captcha' => Mews\Captcha\Facades\Captcha::class,

 

-- cmd窗口中执行 php artisan vendor:publish

 

通过上面的所有步骤,查看目录,你会发现在vendor下多了mews目录,并且你可以使用命名空间 use Captcha, 在config/captcha.php中存在一个验证码的配置文件captcha.php。

 

 

-- 上面的所有步骤在 https://github.com/mewebstudio/captcha 中同样存在!

 

我们来看一看新增的vendor/mews目录

我们找到vendor/mews/captcha/src/captcha.php

查找public 方法, 发现:

public function create($var) --- 生成验证码

public function check($var) --- 判断输入和验证码是否相等

public function src($var)     --- 输出img属性src的链接

public function img($var)    --- 输出img标签

-- 其中,$var 参数就是,config/captcha.php 中 对应的键,分别可以是:

default, flat, mini, inverse 代表了四种风格的验证码!可以针对不同风格进行配置,直接在config/captcha.php中修改配置项

 

-- 实例:

1.在app/Http/routes.php中配置路由

其中captcha/test, 表示测试路径, 映射 CaptchaController 下的 public function index() {}

captcha/mews 映射验证码的输出,映射 CaptchaController 下的 public function mews() {}

 

2.创建控制器

在cmd窗口中,直接输入

php artisan make:controller CaptchaController --plain

如果提示成功,则说明在 app/Http/Controllers/ 下产生了新文件 CaptchaController.php

3.在app/Http/Controllers/CaptchaController.php中新建index() 和 mews() 方法

复制代码
<?php
namespace App\Http\Controllers;

use App\Http\Requests;
use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

//引用对应的命名空间use Session;
use Captcha;

class CaptchaController extends Controller {
    /**
     * 测试页面
     */
    public function index() {
        // $mews = Captcha::src('inverse');, compact('mews')
        return view('captcha.index');
    }
    /*创建验证码*/
    public function mews() {
        return Captcha::create('default');
    }

}
复制代码

4.创建视图

在resources/views/目录下创建captcha目录,分别新建index.blade.php 并且大概做个布局和样式调整

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Learn Laravel 5.1</title>

    <link href="{{ asset('/css/app.css') }}" rel="stylesheet">

    <!-- Fonts -->
    <link href='//fonts.useso.com/css?family=Roboto:400,300' rel='stylesheet' type='text/css'>

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
        <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>
<body>
    <h2>该页面仅仅用来学习验证码</h2>
    <h3>mews</h3>
    @if(count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach($errors->all() as $error)
            <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
    @endif
    <form action="{{ url('test/cpt') }}" method="post">
        <input type="hidden" value="POST" name="_method"><!--
     --><input type="hidden" value="{{ csrf_token() }}" name="_token" /><!--
     --><input type="text" name="cpt" value="" /><!--
     --><img src="{{ url('captcha/mews') }}" onclick="this.src='{{ url('captcha/mews') }}?r='+Math.random();" alt=""><!--
     --><input type="submit" value="Submit" />
    </form>
    <div id="footer" style="text-align: center; border-top: dashed 3px #eeeeee; margin: 50px 0; padding: 20px;">
      ©2015 <a href="http://www.cnblogs.com/Zell-Dinch/">ZellDincht</a>
    </div>
    <!-- Scripts -->
    <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>
</body>
</html>
复制代码

这时候输入:http://your-host/captcha/test 查看

 

这是我的布局和captcha

5. 添加路由到app/Http/routes.php

我通过post提交到后台进行测试

6.在TestController中cpt方法如下:

复制代码
<?php

namespace App\Http\Controllers\Test;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use Input, Validator, Redirect, Session, Captcha;

class TestController extends Controller
{
    public function cpt(Request $request) {
        // dd(Input::get('cpt'));
        $rules = [
            "cpt" => 'required|captcha'
        ];
        $messages = [
            'cpt.required' => '请输入验证码',
            'cpt.captcha' => '验证码错误,请重试'
        ];
     //如果仅仅验证captcha的值可以
     //采用 Captcha::check(Input::get('cpt')); //返回bool
$validator = Validator::make(Input::all(), $rules, $messages); if($validator->fails()) { return Redirect::back()->withErrors($validator); } else { return "验证码OK!"; } } }
复制代码

以上,测试如下,

验证错误:

验证正确:

 

这里没有采用使用Captcha::check()的方式,具体情况具体分析吧。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Laravel-admin 的登录界面添加验证码,可以参考以下步骤: 1. 安装验证码库 可以使用 Laravel 自带的验证码库,也可以使用其他第三方库,这里以 Laravel 自带的验证码库为例。在 Laravel 中,可以使用 Composer 安装验证码库: ``` composer require mews/captcha ``` 2. 生成验证码 在登录页面的表单中添加验证码输入框和验证码图片,然后在后台生成验证码并将其显示在表单中。可以在登录页面的控制器中添加以下代码: ``` use Mews\Captcha\Captcha; public function getLogin() { $captcha = new Captcha(); $captcha->setFontSize(18); $captcha->setLength(4); $captcha->setBackgroundColor(255,255,255); $captcha->setFontColor(0, 0, 0); $captcha->generate(); $captcha_image = $captcha->inline(); return view('admin.login', compact('captcha_image')); } ``` 这段代码生成了一个验证码,并将其嵌入到 HTML 中,然后将其传递给登录页面的视图。 3. 验证验证码 在用户提交表单时,需要验证用户输入的验证码是否正确。可以在登录页面的控制器中添加以下代码: ``` use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rule; use Mews\Captcha\Captcha; public function postLogin(Request $request) { $validator = Validator::make($request->all(), [ 'username' => 'required', 'password' => 'required', 'captcha' => [ 'required', Rule::exists('captcha')->where(function ($query) use($request) { $query->where('captcha', $request->captcha)->where('captcha_type', 'admin_login'); }) ], ], [ 'captcha.exists' => '验证码不正确', ]); if ($validator->fails()) { return redirect()->back()->withErrors($validator)->withInput(); } // 验证通过,进行登录操作 // ... } ``` 这段代码使用 Laravel 自带的表单验证功能,验证用户输入的验证码是否正确。如果验证码不正确,会返回错误信息。如果验证码正确,则进行登录操作。 4. 添加验证码表 为了保存验证码信息,需要在数据库中添加一个验证码表。可以使用以下 SQL 语句创建一个验证码表: ``` CREATE TABLE `captcha` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `captcha` varchar(10) NOT NULL, `captcha_type` varchar(50) NOT NULL, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` 这个表只包含三个字段:`id`、`captcha` 和 `captcha_type`。`id` 是自增主键,`captcha` 是验证码的内容,`captcha_type` 是验证码的类型,用于区分不同场景下的验证码。 5. 保存验证码信息 在生成验证码时,将验证码信息保存到数据库中。可以在 `getLogin` 方法中添加以下代码: ``` use Mews\Captcha\Captcha; use App\Models\Captcha as CaptchaModel; public function getLogin() { $captcha = new Captcha(); $captcha->setFontSize(18); $captcha->setLength(4); $captcha->setBackgroundColor(255,255,255); $captcha->setFontColor(0, 0, 0); $captcha->generate(); $captcha_image = $captcha->inline(); $captcha_db = new CaptchaModel(); $captcha_db->captcha = $captcha->getPhrase(); $captcha_db->captcha_type = 'admin_login'; $captcha_db->save(); return view('admin.login', compact('captcha_image')); } ``` 这段代码使用 `Captcha` 类生成验证码,并将验证码内容和类型保存到数据库中。 6. 清理过期验证码 为了避免数据库中出现大量过期的验证码,可以定期清理过期的验证码。可以在 `Kernel` 类中添加一个定时任务,每天清理过期的验证码: ``` use App\Models\Captcha; use Carbon\Carbon; protected function schedule(Schedule $schedule) { $schedule->call(function () { $expired_at = Carbon::now()->subMinute(30); Captcha::where('created_at', '<', $expired_at)->delete(); })->daily(); } ``` 这段代码每天执行一次,删除创建时间早于 30 分钟前的验证码记录。 以上就是向 Laravel-admin 登录界面添加验证码的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值