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 相关文章推荐
在PHP3中实现SESSION的功能(一)
Oct 09 PHP
PHP 日常开发小技巧
Sep 23 PHP
PHP 一个随机字符串生成代码
May 26 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
Dec 12 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
Jul 29 PHP
php在window iis的莫名问题的测试方法
May 14 PHP
php注册和登录界面的实现案例(推荐)
Oct 24 PHP
centos 7.2下搭建LNMP环境教程
Nov 20 PHP
php常用正则函数实例小结
Dec 29 PHP
PHP实现类似于C语言的文件读取及解析功能
Sep 01 PHP
Laravel修改验证提示信息为中文的示例
Oct 23 PHP
PHP数组访问常用方法解析
Sep 05 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 Undefined index的问题
2009/06/01 PHP
php对mongodb的扩展(初出茅庐)
2012/11/11 PHP
PHP中模拟处理HTTP PUT请求的例子
2014/07/22 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
php获取当前页面完整URL地址
2015/12/30 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
javascript入门·对象属性方法大总结
2007/10/01 Javascript
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
jQuery EasyUI API 中文文档 - ValidateBox验证框
2011/10/06 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
jQuery获取随机颜色的实例代码
2018/05/21 jQuery
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
vue里的data要用return返回的原因浅析
2019/05/28 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
python批量提取word内信息
2015/08/09 Python
pandas 根据列的值选取所有行的示例
2018/11/07 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
Python 200行代码实现一个滑动验证码过程详解
2019/07/11 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
2020/02/11 Python
解决numpy矩阵相减出现的负值自动转正值的问题
2020/06/03 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
2021/03/03 Python
老师对学生的评语
2014/04/18 职场文书
《孙权劝学》教学反思
2014/04/23 职场文书
大学竞选班长演讲稿
2014/04/24 职场文书
经典禁毒标语
2014/06/16 职场文书
婚礼答谢礼品
2015/01/20 职场文书
广告业务员岗位职责
2015/02/13 职场文书
Python 可迭代对象 iterable的具体使用
2021/08/07 Python
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android