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;
|
||
}
|
||
};
|