blob: d04e1023bb5ac26df05164bae803861f7f946ee6 [file] [log] [blame]
// 认证相关的工具函数
/**
* 获取当前用户的认证token
* @returns {string|null} 认证token,如果未登录则返回null
*/
export const getAuthToken = () => {
// 优先从localStorage获取(记住我的情况)
const localToken = localStorage.getItem('authToken');
if (localToken) {
return localToken;
}
// 然后从sessionStorage获取(不记住我的情况)
const sessionToken = sessionStorage.getItem('authToken');
return sessionToken;
};
/**
* 获取当前用户信息
* @returns {object|null} 用户信息,如果未登录则返回null
*/
export const getUserInfo = () => {
// 优先从localStorage获取
const localUserInfo = localStorage.getItem('userInfo');
if (localUserInfo) {
try {
return JSON.parse(localUserInfo);
} catch (error) {
console.error('解析localStorage中的用户信息失败:', error);
}
}
// 然后从sessionStorage获取
const sessionUserInfo = sessionStorage.getItem('userInfo');
if (sessionUserInfo) {
try {
return JSON.parse(sessionUserInfo);
} catch (error) {
console.error('解析sessionStorage中的用户信息失败:', error);
}
}
return null;
};
/**
* 检查用户是否已登录
* @returns {boolean} 是否已登录
*/
export const isLoggedIn = () => {
const token = getAuthToken();
return !!token;
};
/**
* 获取记住的登录信息
* @returns {object} 包含email, password, rememberMe的对象
*/
export const getRememberedLoginInfo = () => {
const email = localStorage.getItem('rememberedEmail') || '';
const password = localStorage.getItem('rememberedPassword') || '';
const rememberMe = localStorage.getItem('rememberMe') === 'true';
return {
email,
password,
rememberMe
};
};
/**
* 保存记住的登录信息
* @param {string} email 邮箱
* @param {string} password 密码
* @param {boolean} remember 是否记住
*/
export const saveRememberedLoginInfo = (email, password, remember) => {
if (remember) {
localStorage.setItem('rememberedEmail', email);
localStorage.setItem('rememberedPassword', password);
localStorage.setItem('rememberMe', 'true');
} else {
localStorage.removeItem('rememberedEmail');
localStorage.removeItem('rememberedPassword');
localStorage.removeItem('rememberMe');
}
};
/**
* 保存用户认证信息
* @param {string} token 认证token
* @param {object} userInfo 用户信息
* @param {boolean} remember 是否记住登录状态
*/
export const saveAuthInfo = (token, userInfo, remember = false) => {
if (remember) {
// 记住我:保存到localStorage
localStorage.setItem('authToken', token);
localStorage.setItem('userInfo', JSON.stringify(userInfo));
// 清除sessionStorage
sessionStorage.removeItem('authToken');
sessionStorage.removeItem('userInfo');
} else {
// 不记住我:保存到sessionStorage
sessionStorage.setItem('authToken', token);
sessionStorage.setItem('userInfo', JSON.stringify(userInfo));
// 清除localStorage中的认证信息(但保留记住的登录表单信息)
localStorage.removeItem('authToken');
localStorage.removeItem('userInfo');
}
};
/**
* 清除所有认证信息(退出登录)
* @param {boolean} clearRemembered 是否同时清除记住的登录信息
*/
export const clearAuthInfo = (clearRemembered = false) => {
// 清除认证token和用户信息
localStorage.removeItem('authToken');
localStorage.removeItem('userInfo');
sessionStorage.removeItem('authToken');
sessionStorage.removeItem('userInfo');
// 如果需要,清除记住的登录信息
if (clearRemembered) {
localStorage.removeItem('rememberedEmail');
localStorage.removeItem('rememberedPassword');
localStorage.removeItem('rememberMe');
}
};
/**
* 创建带认证头的fetch请求配置
* @param {object} options 原始fetch配置
* @returns {object} 带认证头的fetch配置
*/
export const createAuthenticatedRequest = (options = {}) => {
const token = getAuthToken();
if (!token) {
throw new Error('用户未登录');
}
return {
...options,
headers: {
...options.headers,
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
};
};