Gem2a / app /static /js /auth.js
misonL's picture
Redirect to main page after successful login
cbf7243
Raw
History Blame Contribute Delete
2.51 kB
// 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';
}
}
}