wip: 临时提交

This commit is contained in:
Ray.Hao
2025-05-29 17:52:37 +08:00
parent 220f719c38
commit ad4be7a197
10 changed files with 219 additions and 317 deletions

View File

@@ -140,33 +140,3 @@ export function requireLogin(): void {
});
}
}
/**
* 检查令牌是否过期
* 这是一个简单实现如果需要更精确的检查应该解析JWT的payload
* @returns 是否过期
*/
export function isTokenExpired(token: string): boolean {
if (!token) return true;
try {
// 简单解析JWT payload (不验证签名)
const base64Url = token.split(".")[1];
const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/");
const payload = JSON.parse(
decodeURIComponent(
atob(base64)
.split("")
.map((c) => "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2))
.join("")
)
);
// 检查过期时间
const now = Math.floor(Date.now() / 1000);
return payload.exp < now;
} catch (e) {
console.error("解析token失败", e);
return true;
}
}

View File

@@ -1,4 +1,4 @@
import { getAccessToken, getRefreshToken, isTokenExpired, setAccessToken } from "./auth";
import { getAccessToken, getRefreshToken, setAccessToken } from "./auth";
// 刷新令牌的锁,防止多个请求同时刷新令牌
let isRefreshing = false;
@@ -58,8 +58,6 @@ interface RequestOptions<T = any> {
header?: Record<string, string>;
timeout?: number;
responseType?: "text" | "arraybuffer";
// 是否跳过令牌刷新 (用于刷新令牌接口本身)
skipTokenRefresh?: boolean;
}
// 请求函数
@@ -89,12 +87,6 @@ function request<T = any>(options: RequestOptions): Promise<T> {
}
// 未授权错误
else if (res.statusCode === 401) {
// 跳过令牌刷新的请求直接返回错误
if (options.skipTokenRefresh) {
reject(new Error("未授权"));
return;
}
// 尝试刷新令牌
if (!isRefreshing) {
isRefreshing = true;
@@ -141,7 +133,7 @@ function request<T = any>(options: RequestOptions): Promise<T> {
};
// 检查令牌是否过期
if (token && !options.skipTokenRefresh && isTokenExpired(token)) {
if (token) {
if (!isRefreshing) {
isRefreshing = true;