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 相关文章推荐
附件名前加网站名
Mar 23 PHP
php.ini中的php-5.2.0配置指令详解
Mar 27 PHP
php iconv() : Detected an illegal character in input string
Dec 05 PHP
关于二级目录拖拽排序的实现(源码示例下载)
Apr 26 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
Jun 02 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
Aug 09 PHP
php中字符串和正则表达式详解
Oct 23 PHP
php中实现xml与mysql数据相互转换的方法
Dec 25 PHP
smarty模板引擎从配置文件中获取数据的方法
Jan 22 PHP
php实现的网络相册图片防盗链完美破解方法
Jul 01 PHP
一个非常实用的php文件上传类
Jul 04 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 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
php读取文件内容的几种方法详解
2013/06/26 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
splice slice区别
2006/10/09 Javascript
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
2010/05/06 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
JavaScript中setMonth()方法的使用详解
2015/06/11 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
2016/08/03 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
python 装饰器功能以及函数参数使用介绍
2012/01/27 Python
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
Python基于递归实现电话号码映射功能示例
2018/04/13 Python
Python可变和不可变、类的私有属性实例分析
2019/05/31 Python
python识别图像并提取文字的实现方法
2019/06/28 Python
python实现的生成word文档功能示例
2019/08/23 Python
Python实现数值积分方式
2019/11/20 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
Python JSON编解码方式原理详解
2020/01/20 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
ProBikeKit澳大利亚:自行车套件,跑步和铁人三项装备
2016/11/30 全球购物
请说出你所知道的线程同步的方法
2013/04/19 面试题
索桥的故事教学反思
2014/02/06 职场文书
美术教师自我鉴定
2014/02/12 职场文书
低碳生活倡议书
2014/04/14 职场文书
品牌服务方案
2014/06/03 职场文书
安全责任书模板
2014/07/22 职场文书
教师作风整顿个人剖析材料
2014/10/10 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python
Minikube搭建Kubernetes集群
2022/03/31 Servers