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 相关文章推荐
基于mysql的论坛(7)
Oct 09 PHP
信用卡效验程序
Oct 09 PHP
php 数组的创建、调用和更新实现代码
Mar 09 PHP
php笔记之:数据类型与常量的使用分析
May 14 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
May 15 PHP
ThinkPHP3.1的Widget新用法
Jun 19 PHP
PHP Yii框架之表单验证规则大全
Nov 16 PHP
PHP模板引擎Smarty自定义变量调解器用法
Apr 11 PHP
PHP6连接SQLServer2005的三部曲
Apr 15 PHP
Laravel搭建后台登录系统步骤详解
Jul 26 PHP
PHPCMS手机站伪静态设置详细教程
Feb 06 PHP
php实现算术验证码功能
Dec 05 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+jQuery实现自动补全功能源码
2013/05/15 PHP
php sybase_fetch_array使用方法
2014/04/15 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
php表单习惯用的正则表达式
2017/10/11 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
2018/09/16 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
jquery解决客户端跨域访问问题
2015/01/06 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
js实现百度登录框鼠标拖拽效果
2017/03/07 Javascript
BootStrap Fileinput上传插件使用实例代码
2017/07/28 Javascript
微信小程序之前台循环数据绑定
2017/08/18 Javascript
使用Vue制作图片轮播组件思路详解
2018/03/21 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
JS中this的指向以及call、apply的作用
2018/05/06 Javascript
JavaScript this使用方法图解
2020/02/04 Javascript
Vue.js中Line第三方登录api的实现代码
2020/06/29 Javascript
微信小程序实现左滑删除效果
2020/11/18 Javascript
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
django 在原有表格添加或删除字段的实例
2018/05/27 Python
python中dict使用方法详解
2019/07/17 Python
centos7中安装python3.6.4的教程
2019/12/11 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
2020/09/03 Python
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
农药学硕士毕业生自荐信
2013/09/25 职场文书
毕业生在校学习的自我评价分享
2013/10/08 职场文书
银行批评与自我批评
2014/02/10 职场文书
医院安全生产月活动总结
2014/07/05 职场文书
2014年煤矿工人工作总结
2014/12/08 职场文书
五年级学生评语大全
2014/12/26 职场文书
如何书写先进事迹材料?
2019/07/02 职场文书