使用 ThinkPHP5.0.11 版本做登录模块时发现登录时验证码怎么输永远都是验证失败的
导致原因为
生成验证码时传递了配置,而验证验证码时使用Tp自带的验证,未带相同的配置
现将调试过程与结果记录下
生成二维码地址
http://localhost/index.php/captcha.html
找到验证码的文件类
Captcha.php
entry 方法生成验证码
// 保存验证码
$key = $this->authcode($this->seKey);
$code = $this->authcode(strtoupper(implode('', $code)));
$secode = [];
$secode['verify_code'] = $code; // 把校验码保存到session
$secode['verify_time'] = time(); // 验证码创建时间
Session::set($key . $id, $secode, '');
验证码是已键值对保存于SESSION中的
打印下存的 key 是啥
结果
DolphinPHP.COM 这个是自己在 Config.php 设置的验证码密钥
看来 key 是有验证码密钥加密得到的
SESSION 也正常赋值了,看来生成是没什么毛病,在看下验证是什么情况
调试下是怎么验证的
我去,加密使用 DolphinPHP.COM 解密竟然使用 ThinkPHP.CN !!能验证通过么。。
看来验证操作函数 captcha_check ,并没有将配置里的 key 重载,使用tp默认 ThinkPHP.CN
这下来研究下 captcha_check 函数
看完之后发现,使用这个函数还得自己将配置传给第三参数。而文档就那么一句…
看来用这个函数没出问题的一般都是没有自己定义 验证码密钥 seKey 的..
解决方式:
1、使用验证码验证功能时,传入验证码配置(有定义验证码密钥情况下)
2、手动同步两个 seKey 配置。(或验证码配置不要定义 seKey )
最后截上完美成功截图
希望对有遇到此坑的兄die节省时间。