Laravel框架验证码类用法实例分析


Posted in PHP onSeptember 11, 2019

本文实例讲述了Laravel框架验证码类用法。分享给大家供大家参考,具体如下:

在Laravel中有很多图片验证码的库可以使用,本篇介绍其中之一:gregwar/captcha,这个库比较简单,在Laravel中比较常用。下面我们就来介绍下使用细节:

首先, composer.json中如下加入配置:

"require": {
...
"gregwar/captcha": "1.*"
},

然后,已成习惯的命令:

composer update

接下来就可以正常使用了,根据具体的开发需求,可以有很多种方式去使用。

可以将验证码图片保存文件:

<?php
$builder->save('out.jpg');

可以直接输出图片到网页:

header('Content-type: image/jpeg');
$builder->output();

可以生成内联图片:

<img src="<?php echo $builder->inline(); ?>" />

以下演示了其中一种使用方式,直接输出图片到网页。

我定义了一个Controller:

<?php
namespace App\Http\Controllers;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
//引用对应的命名空间
use Gregwar\Captcha\CaptchaBuilder;
use Session;
class KitController extends Controller {
  /**
   * Display a listing of the resource.
   *
   * @return Response
   */
  public function captcha($tmp)
  {
    //生成验证码图片的Builder对象,配置相应属性
    $builder = new CaptchaBuilder;
    //可以设置图片宽高及字体
    $builder->build($width = 100, $height = 40, $font = null);
    //获取验证码的内容
    $phrase = $builder->getPhrase();
    //把内容存入session
    Session::flash('milkcaptcha', $phrase);
    //生成图片
    header("Cache-Control: no-cache, must-revalidate");
    header('Content-Type: image/jpeg');
    $builder->output();
  }
}

下面我们可以设置相应的router访问这个验证码图片, 修改router.php:

Route::get('kit/captcha/{tmp}', 'KitController@captcha');

现在可以通过具体的url,可以访问看到这张图片了

验证码

表单内部写的比较简单,看看即可:

<input type="text" name="captcha" class="form-control" style="width: 300px;">
<a onclick="javascript:re_captcha();" ><img src="{{ URL('kit/captcha/1') }}" alt="验证码" title="刷新图片" width="100" height="40" id="c2c98f0de5a04167a9e427d883690ff6" border="0"></a>
<script>
 function re_captcha() {
  $url = "{{ URL('kit/captcha') }}";
    $url = $url + "/" + Math.random();
    document.getElementById('c2c98f0de5a04167a9e427d883690ff6').src=$url;
 }
</script>

最后就是在form提交页面验证相应验证码,库中也为我们提供了相应方法:

$userInput = $request->get('captcha');
if($builder->testPhrase($userInput)) {
  //用户输入验证码正确
  return '您输入验证码正确';
} else {
  //用户输入验证码错误
  return '您输入验证码错误';
}

至此,验证码就完成了。 如有疑问,欢迎回复探讨。

补充

在form表单提交验证的代码写的比较草率,给读者带来了歧义,在此有个补充(感谢 一块黄布 的回复):

$builder->testPhrase($userInput) 这里的$builder与生成验证码的$builder为同一个,如果重新new,则一直会验证失败。我们可以从源码中看到:

public function testPhrase($phrase)
{
 return ($this->builder->niceize($phrase) == $this->builder->niceize($this->getPhrase()));
}

验证码正确性判断,也可以由下列方式来验证:

$userInput = \Request::get('captcha');
if (Session::get('milkcaptcha') == $userInput) {
  //用户输入验证码正确
  return '您输入验证码正确';
} else {
  //用户输入验证码错误
  return '您输入验证码错误';
}

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
超级简单的发送邮件程序
Oct 09 PHP
PHP静态类
Nov 25 PHP
火车采集器 免费版使出收费版本功能实现原理
Sep 17 PHP
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
Oct 29 PHP
10 个经典PHP函数
Oct 17 PHP
PHP SplObjectStorage使用实例
May 12 PHP
使用ltrace工具跟踪PHP库函数调用的方法
Apr 25 PHP
php发送http请求的常用方法分析
Nov 08 PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
Dec 19 PHP
解析PHP之提取多维数组指定列的方法
Jan 03 PHP
PHP调用接口用post方法传送json数据的实例
May 31 PHP
php 使用 __call实现重载功能示例
Nov 18 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 #PHP
Laravel中正确地返回HTTP状态码方法示例
Sep 10 #PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
Sep 10 #PHP
mysqli扩展无法在PHP7下升级问题的解决
Sep 10 #PHP
PHP 模拟登陆功能实例详解
Sep 10 #PHP
Yii框架日志操作图文与实例详解
Sep 09 #PHP
php求斐波那契数的两种实现方式【递归与递推】
Sep 09 #PHP
You might like
Could not load type System.ServiceModel.Activation.HttpModule解决办法
2012/12/29 PHP
解析thinkphp基本配置 convention.php
2013/06/18 PHP
php实现高效获取图片尺寸的方法
2014/12/12 PHP
PHP实现自动对图片进行滚动显示的方法
2015/03/12 PHP
PHP yii实现model添加默认值的方法(两种方法)
2016/11/10 PHP
PHP中phar包的使用教程
2017/06/14 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
FireFox中textNode分片的问题
2007/04/10 Javascript
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
jQuery实现checkbox全选的方法
2015/06/10 Javascript
浅谈js里面的InttoStr和StrtoInt
2016/06/14 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
2016/08/11 Javascript
详解Node.js:events事件模块
2016/11/24 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
2017/05/18 Javascript
JavaScript创建对象_动力节点Java学院整理
2017/06/27 Javascript
vue.js在标签属性中插入变量参数的方法
2018/03/06 Javascript
js jquery 获取某一元素到浏览器顶端的距离实现方法
2018/09/05 jQuery
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
浅谈Python基础之I/O模型
2017/05/11 Python
python中模块的__all__属性详解
2017/10/26 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
美国网上眼镜商城:Zenni Optical
2016/11/20 全球购物
安踏官方商城:anta.cn
2019/12/16 全球购物
如何打印出当前源文件的文件名以及源文件的当前行号
2015/04/05 面试题
商务英语专业应届毕业生求职信
2013/10/28 职场文书
给海归自荐信的建议
2013/12/13 职场文书
2014年医院党建工作总结
2014/12/20 职场文书
党支部半年考察意见
2015/06/01 职场文书
CSS 文字装饰 text-decoration & text-emphasis 详解
2021/04/06 HTML / CSS
利用Redis实现点赞功能的示例代码
2022/06/28 Redis