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 相关文章推荐
windows xp下安装pear
Dec 02 PHP
有关PHP中MVC的开发经验分享
May 17 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
Nov 26 PHP
php共享内存段示例分享
Jan 20 PHP
跟我学Laravel之配置Laravel
Oct 15 PHP
php递归遍历删除文件的方法
Apr 17 PHP
使用XHGui来测试PHP性能的教程
Jul 03 PHP
基于php实现随机合并数组并排序(原排序)
Nov 26 PHP
Yii2 assets清除缓存的方法
May 16 PHP
php生成word并下载代码实例
Mar 15 PHP
解决Laravel 不能创建 migration 的问题
Oct 09 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 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定时更新程序设计思路分享
2014/06/10 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
在laravel中实现事务回滚的方法
2019/10/10 PHP
两个select之间option的互相添加操作(jquery实现)
2009/11/12 Javascript
js继承的实现代码
2010/08/05 Javascript
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
2013/05/24 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
分享9个最好用的JavaScript开发工具和代码编辑器
2015/03/24 Javascript
AngularJS实现全选反选功能
2015/12/08 Javascript
jQuery中ajax的load()与post()方法实例详解
2016/01/05 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
2017/06/30 Javascript
VUE-cli3使用 svg-sprite-loader
2018/10/20 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
2018/10/22 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
2020/11/06 Javascript
[44:40]2018DOTA2亚洲邀请赛3月30日 小组赛A组Liquid VS OG
2018/03/31 DOTA
[05:24]TI9采访——教练
2019/08/24 DOTA
Python实现抓取网页并且解析的实例
2014/09/20 Python
windows系统下Python环境搭建教程
2017/03/28 Python
解决pycharm工程启动卡住没反应的问题
2019/01/19 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
python上传时包含boundary时的解决方法
2020/04/08 Python
python实现文法左递归的消除方法
2020/05/22 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
New delete 与malloc free 的联系与区别
2013/02/04 面试题
大学生入党自传2015
2015/06/26 职场文书
签字仪式主持词
2015/07/03 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
JS数组的常用方法整理
2021/03/31 Javascript
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js