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笔试题
Aug 04 PHP
php 3行代码的分页算法(求起始页和结束页)
Oct 21 PHP
探讨php中header的用法详解
Jun 07 PHP
使用PHP编写的SVN类
Jul 18 PHP
codeigniter使用技巧批量插入数据实例方法分享
Dec 31 PHP
PHP内置过滤器FILTER使用实例
Jun 25 PHP
php实现最简单的MVC框架实例教程
Sep 08 PHP
php异步多线程swoole用法实例
Nov 14 PHP
PHP实现获取FLV文件的时间
Feb 10 PHP
php文件系统处理方法小结
May 23 PHP
10个值得深思的PHP面试题
Nov 14 PHP
php图片裁剪函数
Oct 31 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_Flame(Version:Progress)的原代码
2006/10/09 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
JavaScript 解析读取XML文档 实例代码
2009/07/07 Javascript
基于jQuery的一个扩展form序列化到json对象
2010/12/09 Javascript
JavaScript实现拼音排序的方法
2012/11/20 Javascript
单击按钮显示隐藏子菜单经典案例
2013/01/04 Javascript
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
JS限制文本框只能输入数字和字母方法
2015/02/28 Javascript
JavaScript返回网页中超链接数量的方法
2015/04/03 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
2016/11/29 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
微信小程序实现下拉加载更多商品
2020/12/29 Javascript
详解在Python程序中自定义异常的方法
2015/10/16 Python
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
python里 super类的工作原理详解
2019/06/19 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
2019/08/21 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
Python必须了解的35个关键词
2020/07/16 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
《地震中的父与子》教学反思
2014/04/10 职场文书
态度决定一切演讲稿
2014/05/20 职场文书
2014各大专业毕业生自我评价
2014/09/17 职场文书
大足石刻导游词
2015/02/02 职场文书
事业单位财务人员岗位职责
2015/04/14 职场文书
使用CSS连接数据库的方式
2022/02/28 HTML / CSS
nginx设置资源请求目录的方式详解
2022/05/30 Servers