// app/static/js/auth.js - 认证相关逻辑 import { AUTH_TOKEN_STORAGE_KEY } from './constants.js'; /** * 处理登录表单提交。 * @param {HTMLFormElement} loginForm - 登录表单元素。 * @param {HTMLInputElement} authTokenInput - 认证令牌输入框。 * @param {HTMLElement} errorMessage - 错误消息显示元素。 */ export function setupLoginForm(loginForm, authTokenInput, errorMessage) { if (loginForm) { loginForm.addEventListener('submit', async (e) => { e.preventDefault(); const authToken = authTokenInput.value.trim(); if (!authToken) { errorMessage.textContent = '认证令牌不能为空。'; return; } localStorage.setItem(AUTH_TOKEN_STORAGE_KEY, authToken); try { const response = await fetch('/v1/health', { headers: { 'X-Auth-Token': authToken } }); if (response.ok) { // 登录成功,重定向到主页面 window.location.href = '/static/index.html'; } else { const errorData = await response.json(); errorMessage.textContent = `登录失败: ${errorData.detail || response.statusText}`; localStorage.removeItem(AUTH_TOKEN_STORAGE_KEY); } } catch (error) { errorMessage.textContent = `登录请求出错: ${error.message}`; localStorage.removeItem(AUTH_TOKEN_STORAGE_KEY); } }); } } /** * 设置登出按钮事件。 * @param {HTMLButtonElement} logoutButton - 登出按钮元素。 */ export function setupLogoutButton(logoutButton) { if (logoutButton) { logoutButton.addEventListener('click', () => { localStorage.removeItem(AUTH_TOKEN_STORAGE_KEY); window.location.href = '/static/login.html'; }); } } /** * 检查认证状态并重定向。 */ export function checkAuthAndRedirect() { const storedAuthToken = localStorage.getItem(AUTH_TOKEN_STORAGE_KEY); if (storedAuthToken) { if (window.location.pathname === '/static/login.html') { window.location.href = '/static/index.html'; } } else { if (window.location.pathname !== '/static/login.html') { window.location.href = '/static/login.html'; } } }