[互助] 老大,求助

🌴Lv.5 高级 🌏 正式会员
2026-10-17 09:15:34
没开启验证码啊,总是提示这个错误,怎么强制登录后台啊
知识,奉行,知行合一
| 瀏覽 75 次 | 回覆 8 次

全部回覆 (5)

👑Lv.11 元老 🌞 骨干会员
2026-10-17 11:17:32
我们这个程序是pow加验证码一起验证的,如果pow不能用,需要开启验证码,你打开验证码,其实也不需要输入,pow会替代。

你打开验证码试一下。
轻量级、高性能、零 MySQL 依赖的PHP社区系统。
#1 樓
👑Lv.11 元老 🌞 骨干会员
2026-10-17 11:18:21
如果还不行,下午回去再说吧,我在骑行💪
轻量级、高性能、零 MySQL 依赖的PHP社区系统。
#2 樓
👑Lv.11 元老 🌞 骨干会员
2026-10-17 17:58:22

查到原因了,@ ahfanxin 感谢提供反馈,修复完毕会发布1.1.26版本。

第一层(最致命):验证码框永远不可能出现。
​
app/Views/auth/login.php:33 把验证码块写成 display:none,只有 pow.js 里 rc.mode === 'captcha' 这个分支才会把它显示出来。但服务端 app/Helpers/PoW.php:39 是 $mode = 'normal'; 硬编码——那条分支是死代码,从 1.0.23 到现在的版本都一样。也就是说验证码在任何情况下都不会出现在界面上。

第二层:PoW 一旦失败就永久锁死。​
pow.js:171 拿不到 challenge 时的兜底是 {mode:'normal', challenge:''},接着 solveNonce('') 在 pow.js:55 直接 return '',然后照常提交空 nonce。服务端 PoW::validate('') 必然 false → 要求图片验证码 → 界面没有框 → 「验证码错误」→ 重试还是同一条路。

第三层:PoW 为什么会失败。​ 按可能性排序:

  1. pow.js:26 硬编码了 '/api/pow',没带 BASE_PATH。​ 同一个项目里 auth.js:55(验证码刷新)和 main.php:606(SW 注册)都用了 (window.BASE_PATH || ''),唯独 pow.js 漏了。站点装在二级目录(如 /bbs)时,请求会打到域名根 → 404 → 必失败。这是唯一一个 100% 必然失败的结构性缺陷,我实测 /nonexistent-base/api/pow 确实 404。
  2. /api/pow 被 CDN / WAF / 宝塔防火墙拦掉(Cloudflare Bot Fight、宝塔「网站防火墙」对 /api/* 的规则很常见)。
  3. JS 根本没跑:主题覆盖层 assets/themes/<主题>/layouts/main.php 里没有 main.php:545 那句 pow.js 引入;或浏览器插件拦截。
  4. xhr.timeout = 8000,2 核 2G 的 VPS 加上反代,8 秒拿不到就 fallback。

轻量级、高性能、零 MySQL 依赖的PHP社区系统。
#3 樓
👑Lv.11 元老 🌞 骨干会员
2026-10-17 18:03:21
ahfanxin 发表于:没开启验证码啊,总是提示这个错误,怎么强制登录后台啊

1.1.26 版本已经发布,请 在浏览器按f12,找到Console 执行:document.querySelector('[data-pow-captcha]').style.display='' 验证码就出来了,你先用这个登录进去,进行更新即可。

轻量级、高性能、零 MySQL 依赖的PHP社区系统。
#4 樓
🌴Lv.5 高级 🌏 正式会员
2026-10-17 20:07:18
好的,已经升级到1.1.26了
知识,奉行,知行合一
#5 樓

請 登入