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中的时间显示
Jan 18 PHP
PHP 文件扩展名 获取函数
Jun 03 PHP
用php实现的获取网页中的图片并保存到本地的代码
Jan 05 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
Oct 31 PHP
PHPMailer邮件发送的实现代码
May 04 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
May 04 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
PHP实现简单爬虫的方法
Jul 29 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
Nov 19 PHP
PHP微信开发之查询微信精选文章
Jun 23 PHP
Yii2基于Ajax自动获取表单数据的方法
Aug 10 PHP
PHP在linux上执行外部命令的方法
Feb 06 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
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
2020/06/03 PHP
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
函数window.open实现关闭所有的子窗口
2015/08/03 Javascript
有关json_decode乱码及NULL的问题
2015/10/13 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
vue2 mint-ui loadmore实现下拉刷新,上拉更多功能
2018/03/21 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
node实现的爬虫功能示例
2018/05/04 Javascript
vux-scroller实现移动端上拉加载功能过程解析
2019/10/08 Javascript
微信小程序实现组件顶端固定或底端固定效果(不随滚动而滚动)
2020/04/09 Javascript
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
Python语言描述连续子数组的最大和
2018/01/04 Python
Python简单实现两个任意字符串乘积的方法示例
2018/04/12 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
2019/05/10 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
python实现猜单词游戏
2020/05/22 Python
用pip给python安装matplotlib库的详细教程
2021/02/24 Python
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
信用社员工先进事迹材料
2014/02/04 职场文书
小学教学随笔感言
2014/02/26 职场文书
大学生全国两会报告感想
2014/03/17 职场文书
yy司仪主持词
2014/03/22 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
理解深度学习之深度学习简介
2021/04/14 Python