feat: 优化web
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
import { refreshAccessToken } from '@/lib/api/auth';
|
||||
|
||||
let inFlight: Promise<boolean> | null = null;
|
||||
|
||||
/**
|
||||
* 并发 401 时共享同一次 refresh,避免重复 POST /oauth/token。
|
||||
* refresh 失败会清空 token(由调用方传入的 setTokens 执行)。
|
||||
*/
|
||||
export function refreshTokensShared(
|
||||
getRefreshToken: () => string | null,
|
||||
setTokens: (access: string | null, refresh: string | null) => void
|
||||
): Promise<boolean> {
|
||||
if (inFlight) {
|
||||
return inFlight;
|
||||
}
|
||||
inFlight = (async () => {
|
||||
try {
|
||||
const rt = getRefreshToken();
|
||||
if (!rt) {
|
||||
return false;
|
||||
}
|
||||
const pair = await refreshAccessToken(rt);
|
||||
setTokens(pair.accessToken, pair.refreshToken);
|
||||
return true;
|
||||
} catch {
|
||||
setTokens(null, null);
|
||||
return false;
|
||||
} finally {
|
||||
inFlight = null;
|
||||
}
|
||||
})();
|
||||
return inFlight;
|
||||
}
|
||||
Reference in New Issue
Block a user