修复"未配置卷王登录账号"导致后台刷新陷入死状态
根因:login.php 仅持久化 username、不持久化 password;token 缓存失效后
自动重登因缺少密码而抛 RuntimeException('未配置卷王登录账号'),前端仅提示
"后台刷新失败,已显示本地缓存"却无法自愈,刷新循环永不恢复。
修复:
- login.php:登录成功时同时持久化 username 与 password,token 失效时平台
可凭凭据自动重新登录卷王,避免死状态。
- api.php:全局 catch 对鉴权类错误(未配置账号/登录失败)打标 extra.auth=true。
- assets/app.js、dashboard.php:api() 透传 auth 标记;刷新失败若为鉴权错误,
自动跳转 login.php 重新登录,不再停留在本地缓存死状态。
验证:本地 mock 卷王端到端复现 CASE1(空账号精确复现报错)与 CASE2
(凭据齐备自动重登成功),HTTP 接口确认返回 extra.auth:true 与 ok:true。
This commit is contained in:
+9
-1
@@ -129,7 +129,9 @@ async function api(action, params){
|
||||
const res = await fetch(url, { headers: { 'Accept': 'application/json' } });
|
||||
const j = await res.json();
|
||||
if (j && j.ok) return j.data;
|
||||
throw new Error((j && (j.msg || j.error)) || '请求失败');
|
||||
const err = new Error((j && (j.msg || j.error)) || '请求失败');
|
||||
err.auth = !!(j && j.extra && j.extra.auth);
|
||||
throw err;
|
||||
}
|
||||
|
||||
/* ---------- 问卷列表(双策略文件夹识别 + 缓存) ---------- */
|
||||
@@ -212,6 +214,12 @@ async function refreshClassSel(){
|
||||
}
|
||||
renderBoard();
|
||||
} catch (e) {
|
||||
if (e.auth) {
|
||||
// 卷王账号未配置或登录失效:跳转登录页自愈
|
||||
$('#boardBody').innerHTML = '<div class="empty">卷王账号未配置或登录已失效,<a href="login.php">点击重新登录</a></div>';
|
||||
setTimeout(() => { location.href = 'login.php'; }, 1200);
|
||||
return;
|
||||
}
|
||||
sel.innerHTML = '<option value="">加载失败</option>';
|
||||
sel.disabled = true;
|
||||
$('#boardBody').innerHTML = '<div class="empty">加载失败:' + esc(e.message) + '</div>';
|
||||
|
||||
Reference in New Issue
Block a user