var navUser = document.querySelector('#navUser'); var user = null; var authToken = localStorage.getItem('userToken') || ''; function getToken() { return authToken || localStorage.getItem('userToken') || ''; } function clearToken() { authToken = ''; localStorage.removeItem('userToken'); } function renderLoggedOut() { if (navUser) navUser.innerHTML = '登录 / 注册'; } async function api(path, options) { options = options || {}; var url = path; if (url.startsWith('/api/')) { url = '/router.php?r=' + encodeURIComponent(url.substring(1)); } var hdrs = { 'Content-Type': 'application/json' }; if (getToken()) hdrs['Authorization'] = 'Bearer ' + getToken(); if (options.headers) Object.assign(hdrs, options.headers); var fetchOpts = { method: options.method || 'GET', headers: hdrs }; if (options.body) fetchOpts.body = options.body; var response = await fetch(url, fetchOpts); var ct = (response.headers.get('content-type') || '').toLowerCase(); var data; if (ct.indexOf('application/json') !== -1 || ct.indexOf('json') !== -1) { data = await response.json().catch(function() { return {}; }); } else { // 非 JSON 响应:通常是 CDN 安全防护系统(anticc_captcha)WAF 拦截页 var rawText = await response.text().catch(function() { return ''; }); var looksHtml = /^\s*登录中… 重试'; var mrb = document.getElementById('meRetryBtn'); if (mrb) mrb.onclick = function() { loadMe(); }; setTimeout(function() { if (getToken() && !user) loadMe(); }, 2500); } return; } // 仅在明确鉴权失败(401/403)时才清除登录态;网络/超时/5xx 等临时错误保留 token,避免误登出 if (e && (e.status === 401 || e.status === 403)) { clearToken(); user = null; renderLoggedOut(); } // 其它错误:不清除登录态、也不强制改写导航,交给页面自身逻辑处理 } } loadMe();