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 相关文章推荐
Search File Contents PHP 搜索目录文本内容的代码
Feb 21 PHP
PHP生成Flash动画的实现代码
Mar 12 PHP
腾讯QQ php程序员面试题目整理
Jun 08 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
Jul 04 PHP
PHP 伪静态技术原理以及突破原理实现介绍
Jul 12 PHP
php-fpm配置详解
Feb 12 PHP
浅析ThinkPHP的模板输出功能
Jul 01 PHP
php根据某字段对多维数组进行排序的方法
Mar 07 PHP
php操作(删除,提取,增加)zip文件方法详解
Mar 12 PHP
PHP并发查询MySQL的实例代码
Aug 09 PHP
laravel中短信发送验证码的实现方法
Apr 25 PHP
Centos7安装swoole扩展操作示例
Mar 26 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
Terran热键控制
2020/03/14 星际争霸
php curl 伪造IP来源的实例代码
2012/11/01 PHP
解析smarty模板中类似for的功能实现
2013/06/18 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
2015/07/04 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
2017/02/15 PHP
php求数组全排列,元素所有组合的方法总结
2017/03/14 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
网页常用特效代码整理
2006/06/23 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
鼠标移入移出事件改变图片的分辨率的两种方法
2013/12/17 Javascript
用jquery实现的一个超级简单的下拉菜单
2014/05/18 Javascript
使用js画图之正弦曲线
2015/01/12 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
全面接触神奇的Bootstrap导航条实战篇
2016/08/01 Javascript
Angularjs实现mvvm式的选项卡示例代码
2016/09/08 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
2016/11/23 Javascript
基本DOM节点操作
2017/01/17 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
2017/01/18 Javascript
python time模块用法实例详解
2014/09/11 Python
Python求导数的方法
2015/05/09 Python
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
用Python登录好友QQ空间点赞的示例代码
2017/11/04 Python
python编程使用协程并发的优缺点
2018/09/20 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
pandas数据处理之绘图的实现
2020/06/15 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
美国最大的袜子制造商和零售商:Renfro Socks
2017/09/03 全球购物
Farfetch台湾官网:奢侈品牌时尚购物平台
2019/06/17 全球购物
意大利单身交友网站:Meetic
2020/07/12 全球购物
CSS实现fullpage.js全屏滚动效果的示例代码
2021/03/24 HTML / CSS
保安队长职务说明书
2014/02/23 职场文书
Python实现双向链表基本操作
2022/05/25 Python