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();