fix(auth): 修复登录后反复报未配置账号并跳回登录页的死循环
根因:ny_save_config 只写不校验,Db::settingsSet 内部吞异常且返回 void。 data/ 目录不可写时登录页照常显示登录成功,但下一请求读到的账号仍是空的 → 抛未配置卷王登录账号 → 前端 auth 打标 → 跳登录页 → 无限循环。 修复: - Db::settingsSet 改返回 bool 并回读校验;新增 settingsDelete - ny_save_config 双写后均做回读校验,失败写入 ny_config_save_error() - 新增 ny_config_diag()/ny_session_usable(),暴露来源/可写性/是否已存账号 - ny_load_config 把 null 账号强制成空字符串(脏数据不再伪装成未配置) - login.php 存凭据后回读确认,存不住/会话不可写直接报错而不是假成功 - login.php 账号为空时页面直接给出 data 目录写权限提示 - config_save 合并逻辑抽成 ny_apply_config_input:账号/密码不许被改空 - 鉴权失败响应带 extra.diag,前端 401 也算 auth - 前端防死循环:刚登录 120s 内或已跳 2 次则停止自动跳转,弹窗给出真实原因+诊断 测试:新增 tests/test-config-persist.php(29) 与 tools/test-login-loop.js(19); run-all.sh 纳入两者。全套 148+48=196 项通过。
This commit is contained in:
+4
-2
@@ -18,7 +18,7 @@ echo "PHP = $PHP"
|
||||
echo "NODE = $NODE"
|
||||
|
||||
echo "================ PHP 自测 ================"
|
||||
for f in tests/test-aggregate.php tests/test-new-features.php tools/test-xlsxwriter.php; do
|
||||
for f in tests/test-aggregate.php tests/test-new-features.php tests/test-config-persist.php tools/test-xlsxwriter.php; do
|
||||
echo ""
|
||||
echo ">>> $f"
|
||||
"$PHP" $INI "$f"
|
||||
@@ -30,7 +30,9 @@ echo "================ Node e2e(需 mock-server + PHP 内置服务器) =====
|
||||
# 彻底避免污染生产 data/ny.db(曾因此把登录页连接信息写成 127.0.0.1)。
|
||||
NY_DATA_TMP="$(pwd)/.ny-test-data"
|
||||
mkdir -p "$NY_DATA_TMP"
|
||||
for f in tools/test-config-save.js tools/test-upload-guard.js tools/test-whitelist.js; do
|
||||
# 说明:test-login-loop.js 会清空数据目录里的账密来复现"未配置账号"现场,
|
||||
# 即使不传 NY_DATA 它也会自己建临时目录,绝不回退到项目 data/。
|
||||
for f in tools/test-config-save.js tools/test-upload-guard.js tools/test-whitelist.js tools/test-login-loop.js; do
|
||||
echo ""
|
||||
echo ">>> $f (NY_DATA=$NY_DATA_TMP)"
|
||||
NY_DATA="$NY_DATA_TMP" "$NODE" "$f"
|
||||
|
||||
Reference in New Issue
Block a user