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 相关文章推荐
用PHP和ACCESS写聊天室(四)
Oct 09 PHP
改变Apache端口等配置修改方法
Jun 05 PHP
php 执行系统命令的方法
Jul 07 PHP
用php实现选择排序的解决方法
May 04 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
Aug 09 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
Jan 14 PHP
smarty内置函数foreach用法实例
Jan 22 PHP
php强制用户转向www域名的方法
Jun 19 PHP
Yii中创建自己的Widget实例
Jan 05 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
Feb 15 PHP
PHP简单判断字符串是否包含另一个字符串的方法
Mar 25 PHP
php实现多维数组排序的方法示例
Mar 23 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
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
2007/03/15 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
详解php实现页面静态化原理
2017/06/21 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
2017/11/07 PHP
php实现算术验证码功能
2018/12/05 PHP
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
2017/04/11 Javascript
jQuery实现动态生成表格并为行绑定单击变色动作的方法
2017/04/17 jQuery
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
2017/04/23 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
Python3.0与2.X版本的区别实例分析
2014/08/25 Python
Python实现周期性抓取网页内容的方法
2015/11/04 Python
深入浅析python继承问题
2016/05/29 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
对Python中画图时候的线类型详解
2019/07/07 Python
解决TensorFlow程序无限制占用GPU的方法
2020/06/30 Python
如何使用Python自动生成报表并以邮件发送
2020/10/15 Python
商务助理岗位职责
2013/11/13 职场文书
暑期社会实践学生的自我评价
2014/01/09 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
中学校庆方案
2014/03/17 职场文书
临床专业自荐信
2014/06/22 职场文书
本科应届生自荐信
2014/06/29 职场文书
村党建工作汇报材料
2014/11/02 职场文书
违纪检讨书范文
2015/01/27 职场文书
医生个人年度总结
2015/02/28 职场文书
幼师必备:幼儿园期末教师评语50条
2019/11/01 职场文书