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之第一天
Oct 09 PHP
php学习 字符串课件
Jun 15 PHP
php session 错误
May 21 PHP
php在文件指定行中写入代码的方法
May 23 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
简单的cookie计数器实现源码
Jun 07 PHP
php通过正则表达式记取数据来读取xml的方法
Mar 09 PHP
php清除和销毁session的方法分析
Mar 19 PHP
thinkphp3.2点击刷新生成验证码
Feb 16 PHP
php观察者模式应用场景实例详解
Feb 03 PHP
PHP微信开发之微信录音临时转永久存储
Jan 26 PHP
PHP实现字母数字混合验证码功能
Jul 11 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 中文乱码解决办法总结分析
2009/07/30 PHP
php数据库备份还原类分享
2014/03/20 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
2014/05/07 PHP
php针对cookie操作的队列操作类实例
2014/12/10 PHP
php实现以只读方式打开文件的方法
2015/03/16 PHP
php将字符串随机分割成不同长度数组的方法
2015/06/01 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
js下用层来实现select的title提示属性
2010/02/23 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
jquery入门必备的基本认识及实例(整理)
2013/06/24 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
JS 获取鼠标左右键的键值方法
2014/10/11 Javascript
js点击按钮实现带遮罩层的弹出视频效果
2015/12/19 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
2017/12/11 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
js实现一个页面多个倒计时的3种方法
2019/02/25 Javascript
微信小程序绘制半圆(弧形)进度条
2020/11/18 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
[00:16]热血竞技场
2019/03/06 DOTA
理解python多线程(python多线程简明教程)
2014/06/09 Python
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
2016/06/23 Python
快速排序的算法思想及Python版快速排序的实现示例
2016/07/02 Python
Python视频爬虫实现下载头条视频功能示例
2018/05/07 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
2019/06/03 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
Europcar澳大利亚官网:全球汽车租赁领域的领导者
2019/03/24 全球购物
集团公司人力资源部岗位职责
2014/01/03 职场文书
大学活动总结格式
2014/04/29 职场文书
沙滩主题婚礼活动策划方案
2014/09/15 职场文书
详解Spring事件发布与监听机制
2021/06/30 Java/Android