webman里不支持think-validate的Validate::rule()方法
文档里也有说明,是我没看到
请 xingxing777 加我v qazink 200红包奉上
所有的客户端使用的api 都通过自定义路由的方式访问
/sendsms 指向 方法 send_sms 发送短信
/login 指向 方法 login 用于登录,
在运行了一段时间后,/send_sms 有可能会触发其他路由内的方法,比如login
有的时候是30% 的概率会运行到别的方法上,有的时候是90%
补充,只要重启,该问题就会消失,暂时无法调试
本地没有遇到过,但是我不确定是否是因为我启动的时间不够长,
目前是 nginx环境运行一段时间有概率出现,
如果解决了 验证可能会比较久(不超过一周),红包会分两次给!
以下为路由配置
Route::post('/sendsms', [LoginController::class, 'send_sms']); // 发送短信验证码
// 需要登录的接口
Route::group("", static function () {
Route::group('/member', static function () {
Route::get('/info', [MemberController::class, 'info']); // 会员信息
Route::post('/submit/verification', [MemberController::class, 'submit_verifications']); // 提交实名信息
Route::get('/verification', [MemberController::class, 'verification']); // 提交实名信息
Route::post('/feedback', [MemberController::class, 'feedback']); // 提交实名信息
});
Route::group('/tool', static function () {
Route::post('/ocr', [ToolController::class, 'ocr_idcard']); // 身份证识别
Route::post('/upload', [ToolController::class, 'uploadimg']); // 图片上传
});
Route::group('/order', static function () {
Route::get('/preview', [OrderController::class, 'preview']); // 下单预览
Route::post('/submit', [OrderController::class, 'order']); // 下单
});
})->middleware([LoginMiddleware::class]);
// nginx 配置如下
upstream webman {
server 127.0.0.1:8787;
keepalive 10240;
}
location /prod/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://webman/;
}
location /api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://webman/;
}
不能保100%复现,重启就会消失
nginx日志
上述nginx日志中,始终都是同一个方法,访问了同一个路由,但是 返回值的大小是不同的,其中
绿色框 15:50:09 发生的请求是正常响应的,
蓝色框都是错误的,
红色框是重启后的,也都正常了。下面附上对应的runtime日志
根据响应时间和对应使用的表格可以看到, 15:50:09 发生的请求是正常响应的,后续的两次都报错了
也和nginx日志能对应上,
错乱的接口可能是登录接口,下图是我小伙伴给我的反馈,
也就是说 访问的是 api/member/submit/verification 实际的调用方法却是api/login对应的方法
服务器环境
Linux iZtemyhm9wbs69Z 3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
php版本 8.2
webman 版本 v2.1.2
为啥要写 static function , 把 static 去掉试试吧
收到,感觉关系不大,因为不被匿名函数包裹的路由也有这个bug. 之所以写static 是因为好久之前看到的一个代码规范,说匿名函数加上static效率会更高,就养成习惯,一直保留下来了1
请问你使用什么验证器?
saithink/think-validate 基于 thik-validate 修改的,兼容php8
我遇到验证器,也是错乱。你排查一下 看对你有没有帮助
和我这个现象差不多? 你用的什么验证器? 最终怎么检查出来的?
我使用的是 think\facade\Validate 和以前的think验证器 现在最新的不会,具体我也忘了,但是我出现的频率比较高,开发阶段。后面更换了。社区也有其他小伙伴遇到过
兄弟后来换的啥验证器,求指导
感谢兄弟,大概率就是这个问题,加我微信 qazink ,我验证一段时间,没问题就红包!
红包不用了
你在登录接口那边,可以增加记录日志,只是看你描述发现不了什么
记录日志每次请求的路由 是否是 api/login ,如果不是,就记录 。
然后你nginx 为什么两个 location 是同样的配置,完全没必要呀
看看中间件的代码,感觉是这里有问题
不用红包,社区里面互相帮助!
老哥高义!!