thinkphp6 实现验证码需五步:安装 think-captcha 扩展、启用 session 中间件、配置 config/captcha.php、创建 captcha() 接口输出图片流、用 captcha_check() 校验输入。

ThinkPHP6 本身不带验证码功能,必须装扩展、配参数、启 Session、写接口、做校验,五步缺一不可。下面按真实开发顺序,手把手带你走通第一次验证码全流程。
安装 think-captcha 扩展
打开终端,进入你的 ThinkPHP6 项目根目录(有 composer.json 和 think 文件的那个),执行:
- composer require topthink/think-captcha
- 安装完成后,检查 vendor/topthink/think-captcha 目录是否存在
- 若提示 Class 'think\captcha\Captcha' not found,运行 composer dump-autoload 刷新自动加载
- 确保 PHP 已启用 GD 扩展(php.ini 中取消 extension=gd 前的分号,重启 Web 服务)
启用 Session 中间件
验证码依赖 Session 存储原始值,TP6 默认关闭,必须手动开启:
- 打开 app/middleware.php
- 找到这一行:// \think\middleware\SessionInit::class
- 删掉开头的 //,变成:\think\middleware\SessionInit::class
- 保存后无需其他操作,框架会在每次请求时自动初始化 Session
配置 captcha.php 参数文件
在 config/ 目录下新建文件 captcha.php,写入基础配置:
return [
'length' => 4,
'expire' => 1800,
'useNoise' => true,
'useCurve' => true,
'fontSize' => 25,
'imageW' => 130,
'imageH' => 50
];
- 这些是常用安全与显示参数,length=4 表示 4 位字符,expire=1800 表示 30 分钟过期
- 文件名和路径必须严格为 config/captcha.php,否则框架无法识别
- 不需要手动加载,框架会自动读取
创建验证码输出接口
在控制器里加一个方法,用于返回图片流。例如在 app/controller/Index.php 中添加:
use think\captcha\facade\Captcha;
public function captcha()
{
return Captcha::create();
}
- 这个方法不能返回字符串或数组,必须直接 return 图片二进制流
- 前端通过
请求该地址即可显示
- 推荐加上点击刷新逻辑:onclick="this.src='{:url('index/captcha')}?'+Math.random()"
接收并校验用户输入
表单提交后,在处理动作中调用校验方法。例如登录提交到 loginCheck 方法:
public function loginCheck()
{
$captcha = input('post.captcha');
if (!captcha_check($captcha)) {
return json(['code' => 0, 'msg' => '验证码错误']);
}
// 继续后续逻辑,如验证账号密码...
}
- captcha_check() 是全局函数,传入用户提交的字符串即可
- 校验成功后验证码自动失效,同一串值只能用一次
- 若始终返回 false,请先确认 Session 是否已启用、是否在同一域名下请求
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











