100 lines
2.6 KiB
TypeScript
100 lines
2.6 KiB
TypeScript
|
|
import { authApi } from './auth';
|
|||
|
|
|
|||
|
|
// 设置token到localStorage
|
|||
|
|
export const setToken = (token: string) => {
|
|||
|
|
if (typeof window !== 'undefined') {
|
|||
|
|
localStorage.setItem('token', token);
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 获取token
|
|||
|
|
export const getToken = (): string | null => {
|
|||
|
|
if (typeof window !== 'undefined') {
|
|||
|
|
return localStorage.getItem('token');
|
|||
|
|
}
|
|||
|
|
return null;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 清除token
|
|||
|
|
export const clearToken = () => {
|
|||
|
|
if (typeof window !== 'undefined') {
|
|||
|
|
localStorage.removeItem('token');
|
|||
|
|
localStorage.removeItem('userInfo');
|
|||
|
|
localStorage.removeItem('token_expired');
|
|||
|
|
localStorage.removeItem('s2_accountId');
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 验证token是否有效
|
|||
|
|
export const validateToken = async (): Promise<boolean> => {
|
|||
|
|
try {
|
|||
|
|
const response = await authApi.getUserInfo();
|
|||
|
|
return response.code === 200;
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('Token验证失败:', error);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 刷新令牌
|
|||
|
|
export const refreshAuthToken = async (): Promise<boolean> => {
|
|||
|
|
if (typeof window === 'undefined') {
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
const response = await authApi.refreshToken();
|
|||
|
|
if (response.code === 200 && response.data?.token) {
|
|||
|
|
setToken(response.data.token);
|
|||
|
|
// 更新过期时间
|
|||
|
|
if (response.data.token_expired) {
|
|||
|
|
localStorage.setItem('token_expired', response.data.token_expired);
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
return false;
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('刷新Token失败:', error);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 检查token是否即将过期
|
|||
|
|
export const isTokenExpiringSoon = (): boolean => {
|
|||
|
|
if (typeof window === 'undefined') {
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const tokenExpired = localStorage.getItem('token_expired');
|
|||
|
|
if (!tokenExpired) return true;
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
const expiredTime = new Date(tokenExpired).getTime();
|
|||
|
|
const currentTime = new Date().getTime();
|
|||
|
|
// 提前10分钟认为即将过期
|
|||
|
|
return currentTime >= (expiredTime - 10 * 60 * 1000);
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('解析token过期时间失败:', error);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 检查token是否已过期
|
|||
|
|
export const isTokenExpired = (): boolean => {
|
|||
|
|
if (typeof window === 'undefined') {
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const tokenExpired = localStorage.getItem('token_expired');
|
|||
|
|
if (!tokenExpired) return true;
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
const expiredTime = new Date(tokenExpired).getTime();
|
|||
|
|
const currentTime = new Date().getTime();
|
|||
|
|
// 提前5分钟认为过期,给刷新留出时间
|
|||
|
|
return currentTime >= (expiredTime - 5 * 60 * 1000);
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('解析token过期时间失败:', error);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
};
|