ThinkPHP 验证码扩展库的使用,以及多应用模式下,如何自定义验证码校验规则

ThinkPHP 验证码扩展库的使用,以及多应用模式下,如何自定义验证码校验规则

  • 一、安装
  • 二、页面使用
  • 三、验证码相关配置属性
    • 1. 自定义验证码配置
    • 2. 自定义验证码(一)普通验证码
    • 3. 自定义验证码(二)算数验证码
    • 4. 自定义验证码(三)中文验证码
    • 5. 验证校验

一、安装

首先,验证码扩展库是需要view扩展的

composer require topthink/think-view

安装完成后,接着安装验证码扩展库

composer require topthink/think-captcha

视图使用的说明:
在这里插入图片描述

二、页面使用

页面使用的话,两种方式

<div>{:captcha_img()}</div><!--或者 --><div><img src="{:captcha_src()}" alt="captcha" /></div>

侧重说明一下,使用第二种方式

我们只需要在控制器中提供一个方法,用于验证码的生成,然后前端将img的src属性修改为对应的方法路径即可

在这里插入图片描述

在这里插入图片描述

三、验证码相关配置属性

属性说明:

参数描述默认
codeSet验证码字符集合
expire验证码过期时间(s)
math使用算术验证码false
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

1. 自定义验证码配置

安装验证码扩展后,在当前项目中的全局配置文件config目录中,会多出一项captcha.php用于配置验证码的相关配置。

在这里插入图片描述

在单应用模式下,我们可以直接通过config/captcha.php 来配置项目中的验证码相关配置。

多应用模式下的话,将config/captcha.php 拷贝一份到每个应用中的config目录中,然后在根据不同的应用去修改相应的验证码配置。

2. 自定义验证码(一)普通验证码

<?php// +----------------------------------------------------------------------// | Captcha配置文件// +----------------------------------------------------------------------return [//验证码位数'length'   => 4,// 验证码字符集合'codeSet'  => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY',// 验证码过期时间'expire'   => 1800,// 是否使用中文验证码'useZh'    => false,// 是否使用算术验证码'math'     => false,// 是否使用背景图'useImgBg' => false,//验证码字符大小'fontSize' => 25,// 是否使用混淆曲线'useCurve' => false,//是否添加杂点'useNoise' => false,// 验证码字体 不设置则随机'fontttf'  => '',//背景颜色'bg'       => [243, 251, 254],// 验证码图片高度'imageH'   => 0,// 验证码图片宽度'imageW'   => 0,// 添加额外的验证码设置// verify => [//     'length'=>4,//    ...//],];

在这里插入图片描述

3. 自定义验证码(二)算数验证码

<?php
// +----------------------------------------------------------------------
// | Captcha配置文件
// +----------------------------------------------------------------------return [//验证码位数'length'   => 4,// 验证码字符集合'codeSet'  => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY',// 验证码过期时间'expire'   => 1800,// 是否使用中文验证码'useZh'    => false,// 是否使用算术验证码'math'     => true,// 是否使用背景图'useImgBg' => false,//验证码字符大小'fontSize' => 25,// 是否使用混淆曲线'useCurve' => false,//是否添加杂点'useNoise' => false,// 验证码字体 不设置则随机'fontttf'  => '',//背景颜色'bg'       => [243, 251, 254],// 验证码图片高度'imageH'   => 0,// 验证码图片宽度'imageW'   => 0,// 添加额外的验证码设置// verify => [//     'length'=>4,//    ...//],
];

在这里插入图片描述

4. 自定义验证码(三)中文验证码

<?php// +----------------------------------------------------------------------// | Captcha配置文件// +----------------------------------------------------------------------return [//验证码位数'length'   => 4,// 验证码字符集合'codeSet'  => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY',// 验证码过期时间'expire'   => 1800,// 是否使用中文验证码'useZh'    => true,// 是否使用算术验证码'math'     => false,// 是否使用背景图'useImgBg' => false,//验证码字符大小'fontSize' => 25,// 是否使用混淆曲线'useCurve' => false,//是否添加杂点'useNoise' => false,// 验证码字体 不设置则随机'fontttf'  => '',//背景颜色'bg'       => [243, 251, 254],// 验证码图片高度'imageH'   => 0,// 验证码图片宽度'imageW'   => 0,// 添加额外的验证码设置// verify => [//     'length'=>4,//    ...//],];

在这里插入图片描述

5. 验证校验

这里为了简单演示,就使用一个表单校验一下:

  1. 页面部分
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body><form action="http://robinadmin.com/index.php/index/check" method="get"><input name="yzm" type="text"> <div style="display: inline-block">{:captcha_img()}</div><input type="submit" value="提交"><p>{$rs}</p></form></body>
</html>
  1. 后台校验部分
<?php
declare (strict_types = 1);namespace app\admin\controller;use think\facade\View;
use think\Request;class Index
{public function index(){return View::fetch();}public function hello(){return view::fetch('hello',['rs'=>' ']);}// 验证public function check(Request $request){// 1.获取验证码$yzm = $request->param('yzm');// 2.比对校验if(!captcha_check($yzm)){return view::fetch('hello',['rs'=>'验证码错误']);}// 3.返回结果return view::fetch('hello',['rs'=>'验证码正确']);}
}

上面的验证规则也可以修改如下,然后多提一嘴,实时验证的功能就是前端不断的发送请求给后端,当你的输入框的值改变时。

    public function check(Request $request){// 比对校验 input('请求方式.验证码输入框name名称')if(!captcha_check(input('get.yzm'))){return view::fetch('hello',['rs'=>'验证码错误']);}// 返回结果return view::fetch('hello',['rs'=>'验证码正确']);}

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/109631.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL概述,架构原理

一.MySQL简介 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典的MySQL AB公司开发&#xff0c;后被oracle公司收购&#xff0c;MySQL是当下最流行的关系型数据库管理系统之一&#xff0c;在WEB应用方面&#xff0c;MySQL是最好的RDBMS&#xff08;Relational Database Man…

为 LVGL 添加截图功能(lv_100ask_screenshot)

完整的演示视频观看&#xff1a; https://www.bilibili.com/video/BV18r4y1X7MJ 前言 lv_100ask_screenshot 是一个基于 lvgl 的屏幕截图工具。 lv_100ask_screenshot 特性&#xff1a; 可以将LVGL的屏幕对象(全屏)保存为图片文件&#xff1a;lv_scr_act()&#xff0c;laye…

Flask狼书笔记 | 03_模板

文章目录 3 模板3.1 模板基本使用3.2 模板结构组织3.3 模板进阶 3 模板 模板&#xff08;template&#xff09;&#xff1a;包含固定内容和动态部分的可重用文件。Jinja2模板引擎可用于任何纯文本文件。 3.1 模板基本使用 HTML实体&#xff1a;https://dev.w3.org/html5/htm…

基于Ubuntu坏境下的Suricata坏境搭建

目录 Suricata环境安装 第一步、在 Ubuntu 端点安装 Suricata 1、加入Suricata源 2、更新安装包 3、下载SuricataSuricata 第二步、下载并提取新兴威胁 Suricata 规则集 1、在tmp文件夹下载 Suricata 规则集 如果发现未安装curl&#xff0c;使用apt安装即可&#xff1a;…

得帆信息CEO张桐接受21世纪财经深度专访,表示AIGC+低代码将带来生产效率的变革

近日&#xff0c;得帆信息创始人兼CEO张桐接受了21世纪财经深度专访&#xff0c;他表示AIGC低代码的黄金组合&#xff0c;将带来生产效率的变革。 眼下&#xff0c;低代码与AI创新的联接才刚刚开始&#xff0c;也必然会带来生产效率的变革。 在AIGC汹涌的浪潮下&#xff0c;聊…

【软件安装】Python安装详细教程(附安装包)

软件简介 Python由荷兰数学和计算机科学研究学会的Guido van Rossum 于1990 年代初设计&#xff0c;作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构&#xff0c;还能简单有效地面向对象编程。Python语法和动态类型&#xff0c;以及解释型语言的本质&#xff0c…

机械臂手眼标定ZED相机——眼在手外python、matlab

目录 1.眼在手外原理 2.附上眼在手外求得手眼矩阵的python代码 3.眼在手外标定步骤 1&#xff09;打印棋盘格 2&#xff09;得到hand数据 3&#xff09;得到camera数据 4.运行python得到手眼矩阵 1.眼在手外原理 眼在手外所求的手眼矩阵是基坐标到相机的转换矩阵 2.附上…

springboot服务注册到Eureka,端口总是默认8080,自己配置端口不生效

这段时间接手了一个公司的老项目&#xff0c;用的是SpringCloud&#xff0c;在我用的时候突然发现有一个服务&#xff0c;注册到Eureka后&#xff0c;界面显示的端口和实际Ribbon调用的实例端口是不一致的&#xff0c;后来我自己写了个端口获取了一下所有的实例信息&#xff0c…

门禁系统忘记登入密码,现在更换电脑如何迁移旧电脑门禁系统的数据

环境&#xff1a; ivms-4200 v3.10.0.6_c 问题描述&#xff1a; 门禁系统忘记登入密码,现在更换电脑如何迁移旧电脑门禁系统的数据&#xff0c;旧电脑记住密码&#xff0c;忘了密码和密保了 解决方案&#xff1a; 1.前往海康官网下载4200客户端&#xff0c;在新电脑上安装 …

JavaScript用indexOf()在字符串数组中查找子串时需要注意的一个地方

一、遇到问题 在 继续更新完善&#xff1a;C 结构体代码转MASM32代码 中&#xff0c;由于结构体成员中可能为数组类型的情况&#xff0c;因此我们在提取结构体成员信息的过程中&#xff0c;需要检测结构体成员名称字符串中是否包括 []&#xff0c;如果包括那么我们要截取[前面…

纸贵科技连续三年蝉联IDC中国 FinTech 50榜单

近日&#xff0c;国际权威市场研究机构IDC公布了“2023 IDC中国FinTech 50榜单”。作为领先的区块链技术和解决方案服务商&#xff0c;纸贵科技凭借过硬的区块链技术和丰富的金融科技创新成果&#xff0c;连续第三年荣登IDC中国FinTech 50榜单。 IDC中国FinTech 50榜单是金融科…

java八股文面试[数据结构]——ConcurrentHashMap原理

HashMap不是线程安全&#xff1a; 在并发环境下&#xff0c;可能会形成环状链表&#xff08;扩容时可能造成&#xff0c;具体原因自行百度google或查看源码分析&#xff09;&#xff0c;导致get操作时&#xff0c;cpu空转&#xff0c;所以&#xff0c;在并发环境中使用HashMap是…

腾讯云coding平台平台inda目录遍历漏洞复现

前言 其实就是一个python的库可以遍历到&#xff0c;并不能遍历到别的路径下&#xff0c;后续可利用性不大&#xff0c;并且目前这个平台私有部署量不多&#xff0c;大多都是用腾讯云在线部署的。 CODING DevOps 是面向软件研发团队的一站式研发协作管理平台&#xff0c;提供…

kafka和消息队列

https://downloads.apache.org/kafka/3.5.1/kafka_2.13-3.5.1.tgz d kafka依赖与zookeeper kakka配置文件 broker.id1 #每个 broker 在集群中的唯一标识&#xff0c;正整数。每个节点不一样 listenersPLAINTEXT://192.168.74.70:9092 ##监听地址 num.network.threads3 #…

“超级AI助手:全新提升!中文NLP训练框架,快速上手,海量训练数据,ChatGLM-v2、中文Bloom、Dolly_v2_3b助您实现更智能的应用!”

“超级AI助手&#xff1a;全新提升&#xff01;中文NLP训练框架&#xff0c;快速上手&#xff0c;海量训练数据&#xff0c;ChatGLM-v2、中文Bloom、Dolly_v2_3b助您实现更智能的应用&#xff01;” 1.简介 目标&#xff1a;基于pytorch、transformers做中文领域的nlp开箱即用…

URI和URL和URN区别

URI、URL 和 URN 是一系列从不同角度来看待资源标识和定位的概念。虽然它们有一些重叠&#xff0c;但每个概念都强调了不同的方面。 URI&#xff08;Uniform Resource Identifier&#xff09;&#xff1a;URI 是一个通用的术语&#xff0c;用于标识和定位资源。它是一个抽象的概…

DockerCompose介绍与使用

DockerCompose介绍与使用 1、DockerCompose介绍 DockerCompose用于定义和运行多容器 Docker 应用程序的工具。 通过 Compose可以使用 YAML 文件来配置应用程序需要的所有服务。一个使用Docker容器的应用&#xff0c;通常由多个容器组成&#xff0c;使用Docker Compose不再需要…

在腾讯云服务器OpenCLoudOS系统中安装Jenkins(有图详解)

Jenkins介绍 Jenkins是一个开源软件项目&#xff0c;是基于java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件的持续集成变成可能。 将项目代码的svn地址配置在Jenkins&#xff0c;就可以直接在Je…

原生web实现不固定列数的表格、随机列、document、querySelector、forEach、hasOwnProperty、call、includes

文章目录 效果图公共样式第一种解决方案(不推荐)第二种解决方案(强烈推荐) 效果图 公共样式 .d_f {display: flex; }.flex_1 {flex: 1; }.jc_sb {justify-content: space-between; }.ai_c {align-items: center; }.bc_ccc {background-color: #cccccc; }/* ------------paddin…

Docker容器中的Postgresql备份脚本异常解决办法

本文基于K8S中Docker容器对postgres数据库进行备份的操作&#xff0c;编写好脚本后&#xff0c;手动执行脚本是正常的&#xff0c;但是crontab定时实行却报错&#xff0c;报错信息为kubectl command not found&#xff0c;提示没有找到kubectl指令。 本文主要介绍对该报错信息…