热门标签 | 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等字符




推荐阅读
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社区 版权所有