bfe39e45a9
5. 修改统一认证登录和管理员登录是通过接口形式进行,存储返回的accessToken。 6. 修改交叉评查的部分样式
106 lines
2.3 KiB
TypeScript
106 lines
2.3 KiB
TypeScript
/**
|
|
* 认证信息存储工具
|
|
* 用于在客户端(浏览器)存储和管理 JWT token 和用户信息
|
|
*/
|
|
|
|
/**
|
|
* 存储的用户信息接口
|
|
*/
|
|
export interface StoredUserInfo {
|
|
user_id: string;
|
|
username: string;
|
|
nick_name: string;
|
|
email?: string;
|
|
phone_number?: string;
|
|
ou_id: string;
|
|
ou_name: string;
|
|
is_leader: boolean;
|
|
user_role: string;
|
|
sub: string;
|
|
}
|
|
|
|
/**
|
|
* 存储 JWT token 到 localStorage
|
|
*/
|
|
export function storeAccessToken(token: string): void {
|
|
if (typeof window === 'undefined') {
|
|
console.warn('⚠️ storeAccessToken 只能在浏览器环境中使用');
|
|
return;
|
|
}
|
|
localStorage.setItem('access_token', token);
|
|
console.log('✅ Token 已存储到 localStorage');
|
|
}
|
|
|
|
/**
|
|
* 获取存储的 JWT token
|
|
*/
|
|
export function getAccessToken(): string | null {
|
|
if (typeof window === 'undefined') {
|
|
return null;
|
|
}
|
|
return localStorage.getItem('access_token');
|
|
}
|
|
|
|
/**
|
|
* 存储用户信息到 localStorage
|
|
*/
|
|
export function storeUserInfo(userInfo: StoredUserInfo): void {
|
|
if (typeof window === 'undefined') {
|
|
console.warn('⚠️ storeUserInfo 只能在浏览器环境中使用');
|
|
return;
|
|
}
|
|
localStorage.setItem('user_info', JSON.stringify(userInfo));
|
|
console.log('✅ 用户信息已存储到 localStorage');
|
|
}
|
|
|
|
/**
|
|
* 获取存储的用户信息
|
|
*/
|
|
export function getUserInfo(): StoredUserInfo | null {
|
|
if (typeof window === 'undefined') {
|
|
return null;
|
|
}
|
|
|
|
const userInfoStr = localStorage.getItem('user_info');
|
|
if (!userInfoStr) {
|
|
return null;
|
|
}
|
|
|
|
try {
|
|
return JSON.parse(userInfoStr) as StoredUserInfo;
|
|
} catch (error) {
|
|
console.error('❌ 解析用户信息失败:', error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 清除所有认证信息
|
|
*/
|
|
export function clearAuth(): void {
|
|
if (typeof window === 'undefined') {
|
|
console.warn('⚠️ clearAuth 只能在浏览器环境中使用');
|
|
return;
|
|
}
|
|
|
|
localStorage.removeItem('access_token');
|
|
localStorage.removeItem('user_info');
|
|
console.log('✅ 认证信息已清除');
|
|
}
|
|
|
|
/**
|
|
* 检查是否已登录(有有效的 token)
|
|
*/
|
|
export function isAuthenticated(): boolean {
|
|
const token = getAccessToken();
|
|
return !!token;
|
|
}
|
|
|
|
/**
|
|
* 存储完整的登录响应数据
|
|
*/
|
|
export function storeLoginData(accessToken: string, userInfo: StoredUserInfo): void {
|
|
storeAccessToken(accessToken);
|
|
storeUserInfo(userInfo);
|
|
}
|