Thinkphp5.0.11 验证码永远错误

使用 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节省时间。

转载于:https://my.oschina.net/18y/blog/1829090

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值