热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:13.ThinkPHP扩展库:验证码的使用

篇首语:本文由编程笔记#小编为大家整理,主要介绍了13.ThinkPHP扩展库:验证码的使用相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了13.ThinkPHP扩展库:验证码 的使用相关的知识,希望对你有一定的参考价值。




安装

安装需要使用Composer安装think-captcha扩展包

composer require topthink/think-captcha=2.0.*

image-20200528164238599


使用方法

扩展包内定义了一些常见用法方便使用,可以满足大部分常用场景,以下示例说明。

在模版内添加验证码的显示代码

直接生成了html (验证码)

{:captcha_img()}

或者

生成了验证码路径

captcha


上面两种的最终效果是一样的,根据需要调用即可。


例:

视图文件















用户登陆






{:token()}








































控制器

php
namespace app\\index\\controller;
use think\\Controller;
use think\\facade\\Request;
class Login extends Controller
{
//登陆界面
public function index(){
return view(\'index@login/index\');
}
//登陆处理
public function login(Request $request){
}
}

路由

//登陆路由
Route::get(\'login\', \'@index/login/index\')->name(\'login\');

运行效果

image-20200528174015252


访问路由直接返回验证码

如果需要自己独立生成验证码,可以调用Captcha类(think\\captcha\\Captcha)操作。

在控制器中使用下面的代码进行验证码生成:

namespace app\\index\\controller;
use think\\captcha\\Captcha;
class Index
{
public function verify()
{
$captcha = new Captcha();
return $captcha->entry();
}

}

例:

控制器

namespace app\\index\\controller;
use app\\index\\validate\\LoginValidate;
use think\\captcha\\Captcha;
use think\\Controller;
use think\\Request;
class Login extends Controller
{
//访问登陆验证码
public function vcode(){
$captcha = new Captcha();
return $captcha->entry();
}
}

路由

//访问直接返回验证码
Route::get(\'loginCode\', \'@index/login/vcode\')->name(\'loginCode\');

运行结果

image-20200528184652259


验证码的验证


方式一:验证器验证验证码

验证器

namespace app\\index\\validate;
use think\\Validate;
class LoginValidate extends Validate
{
/**
* 定义验证规则
* 格式:\'字段名\' => [\'规则1\',\'规则2\'...]
*
* @var array
*/
protected $rule = [
\'code\' => \'require|captcha\'
];

/**
* 定义错误信息
* 格式:\'字段名.规则名\' => \'错误信息\'
*
* @var array
*/
protected $message = [
\'code.captcha\' => \'你想干吗,验证码都输不对\'
];
}

image-20200528181728784

控制器

namespace app\\index\\controller;
use app\\index\\validate\\LoginValidate;
use think\\Controller;
use think\\Request;
class Login extends Controller
{
//登陆界面
public function index(){
return view(\'index@login/index\');
}
//登陆处理
public function login(Request $request){
$res = $this->validate($request->post(),LoginValidate::class);
if(true !== $res){
return $this->error($res);
}
dump($request->post());
}
}

路由

//登陆界面路由
Route::get(\'login\', \'@index/login/index\')->name(\'login\');
//登陆后台提交路由
Route::post(\'loginSubmit\', \'@index/login/login\')->name(\'loginSubmit\');

视图
















用户登录






{:token()}



































运行结果

image-20200528182023561


方式二:独立验证

如果没有使用内置验证功能,则可以调用内置的函数手动验证

if(!captcha_check($captcha)){
// 验证失败
};

例:

// 独立去验证验证码
$code = $request->post(\'code\');
// 如果验证不通过,则返回false
if (!captcha_check($code)) {
return $this->error(\'验证不正确\');
}

运行结果

image-20200528185501292


验证码的配置参数

Captcha类带有默认的配置参数,支持自定义配置。这些参数包括:


















































































参数描述默认
codeSet验证码字符集合
expire验证码过期时间(s)1800
useZh使用中文验证码false
zhSet中文验证码字符串
useImgBg使用背景图片false
fontSize验证码字体大小(px)25
useCurve是否画混淆曲线true
useNoise是否添加杂点true
imageH验证码图片高度,设置为0为自动计算0
imageW验证码图片宽度,设置为0为自动计算0
length验证码位数5
fontttf验证码字体,不设置是随机获取
bg背景颜色[243, 251, 254]
reset验证成功后是否重置true

如果使用扩展内置的方法进行验证码显示,直接在应用的config目录下面的captcha.php文件(没有则首先创建)中进行设置即可


例:

config目录下面的captcha.php文件

return [
\'length\' => 2,
\'useCurve\' => false,
\'useNoise\' => false,
\'imageW\' => 140,
\'imageH\' => 40
];

运行效果

image-20200528174718335


独立调用Captcha类

实例化传入参数:

$cOnfig= [
// 验证码字体大小
\'fontSize\' => 30,
// 验证码位数
\'length\' => 3,
// 关闭验证码杂点
\'useNoise\' => false,
];
$captcha = new Captcha($config);
return $captcha->entry();

或者采用动态设置的方式,如:

$captcha = new Captcha();
$captcha->fOntSize= 30;
$captcha->length = 3;
$captcha->useNoise = false;
return $captcha->entry();

验证码字体

默认情况下,验证码的字体是随机使用扩展包内 think-captcha/assets/ttfs目录下面的字体文件,我们可以指定验证码的字体,例如:

$captcha = new Captcha();
$captcha->fOntttf= \'5.ttf\';
return $captcha->entry();

背景图片

支持验证码背景图片功能,可以如下设置:

$captcha = new Captcha();
// 开启验证码背景图片功能 随机使用扩展包内`think-captcha/assets/bgs`目录下面的图片
$captcha->useImgBg = true;
return $captcha->entry();

中文验证码

如果要使用中文验证码,可以设置:

$captcha = new Captcha();
// 使用中文验证码(字体使用扩展包内`think-captcha/assets/zhttfs`字体文件)
$captcha->useZh = true;
return $captcha->entry();

指定验证码字符

指定验证码的字符,可以设置:

$captcha = new Captcha();
// 设置验证码字符为纯数字
$captcha->codeSet = \'0123456789\';
return $captcha->entry();

如果是中文验证码,可以使用zhSet参数设置,例如:

$captcha = new Captcha();
$captcha->useZh = true;
// 设置验证码字符
$captcha->zhSet = \'们以我到他会作时要动国产的一是工就年阶义发成部民可出能方进在了不和有大这\';
return $captcha->entry();

默认的验证码字符已经剔除了易混淆的1l0o等字符




推荐阅读
  • XAMPP 遇到 404 错误:无法找到请求的对象
    在使用 XAMPP 时遇到 404 错误,表示请求的对象未找到。通过详细分析发现,该问题可能由以下原因引起:1. `httpd-vhosts.conf` 文件中的配置路径错误;2. `public` 目录下缺少 `.htaccess` 文件。建议检查并修正这些配置,以确保服务器能够正确识别和访问所需的文件路径。 ... [详细]
  • 本文详细介绍如何安装和配置DedeCMS的移动端站点,包括新版本安装、老版本升级、模板适配以及必要的代码修改,以确保移动站点的正常运行。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • 本文介绍了.hbs文件作为Ember.js项目中的视图层,类似于HTML文件的功能,并详细讲解了如何在Ember.js应用中集成Bootstrap框架及其相关组件的方法。 ... [详细]
  • 在Java开发中,保护代码安全是一个重要的课题。由于Java字节码容易被反编译,因此使用代码混淆工具如ProGuard变得尤为重要。本文将详细介绍如何使用ProGuard进行代码混淆,以及其基本原理和常见问题。 ... [详细]
  • 驱动程序的基本结构1、Windows驱动程序中重要的数据结构1.1、驱动对象(DRIVER_OBJECT)每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱 ... [详细]
  • 本文将详细探讨PHP中C的作用,并对比其他编程语言如Java和C的特点及其适用场景。 ... [详细]
  • ThinkPHP框架中的惯例配置文件 `/Common/convention.php` 包含了多个重要的默认设置,如 `DEFAULT_MODULE` 和 `DEFAULT_ACTION`。这些配置项用于定义系统的默认模块和默认操作,确保在没有明确指定的情况下,系统能够正确地加载和执行相应的模块和动作。通过合理配置这些参数,开发者可以简化项目的初始化过程,并提高系统的灵活性和可维护性。 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • 本文详细介绍了如何在PHP中记录和管理行为日志,包括ThinkPHP框架中的日志记录方法、日志的用途、实现原理以及相关配置。 ... [详细]
  • ThinkPHP模板中函数调用的开发技巧与实践 ... [详细]
  • 触发器的稳态数量分析及其应用价值
    本文对数据库中的SQL触发器进行了稳态数量的详细分析,探讨了其在实际应用中的重要价值。通过研究触发器在不同场景下的表现,揭示了其在数据完整性和业务逻辑自动化方面的关键作用。此外,还介绍了如何在Ubuntu 22.04环境下配置和使用触发器,以及在Tomcat和SQLite等平台上的具体实现方法。 ... [详细]
  • 实现Nginx对ThinkPHP URL重写及PATHINFO支持的详细方法解析【PHP开发】
    在PHP后端开发中,实现Nginx对ThinkPHP的URL重写及PATHINFO支持是一项常见的需求。本文详细解析了经过多次尝试和研究,最终找到的一种有效配置方法,能够确保URL_MODERewrite功能正常运行,并提供稳定的服务。此外,文章还探讨了相关配置项的具体作用及其优化建议,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • ThinkPHP框架下实现文件下载功能的详细指南
    ThinkPHP框架下实现文件下载功能的详细指南 ... [详细]
author-avatar
mobiledu2502876347
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有