fix: 完善鉴权模块,修复 CI/CD 中 dubious ownership 错误 #143
@@ -116,7 +116,7 @@ async function request<T>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return { data: body as T, status };
|
return { data: body as T, status };
|
||||||
} catch (err) {
|
} catch {
|
||||||
return {
|
return {
|
||||||
error: { code: "NETWORK_ERROR", message: "网络连接失败,请检查网络" },
|
error: { code: "NETWORK_ERROR", message: "网络连接失败,请检查网络" },
|
||||||
status: 0,
|
status: 0,
|
||||||
|
|||||||
@@ -109,20 +109,14 @@ export function AuthProvider({ children }: { children: ReactNode }) {
|
|||||||
[clearRefreshTimer, persistAuth]
|
[clearRefreshTimer, persistAuth]
|
||||||
);
|
);
|
||||||
|
|
||||||
// 用 ref 保存最新回调,供 API 层 401 拦截器使用(避免闭包陈旧)
|
|
||||||
const persistAuthRef = useRef(persistAuth);
|
|
||||||
const scheduleRefreshRef = useRef(scheduleRefresh);
|
|
||||||
persistAuthRef.current = persistAuth;
|
|
||||||
scheduleRefreshRef.current = scheduleRefresh;
|
|
||||||
|
|
||||||
// 注册 API 层认证回调(用于 401 拦截器)
|
// 注册 API 层认证回调(用于 401 拦截器)
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setAuthCallbacks({
|
setAuthCallbacks({
|
||||||
getAccessToken: () => loadAccessToken(),
|
getAccessToken: () => loadAccessToken(),
|
||||||
getRefreshToken: () => loadRefreshToken(),
|
getRefreshToken: () => loadRefreshToken(),
|
||||||
onRefreshSuccess: (u, at, rt) => {
|
onRefreshSuccess: (u, at, rt) => {
|
||||||
persistAuthRef.current(u, at, rt);
|
persistAuth(u, at, rt);
|
||||||
scheduleRefreshRef.current(at);
|
scheduleRefresh(at);
|
||||||
},
|
},
|
||||||
onRefreshFailed: () => {
|
onRefreshFailed: () => {
|
||||||
clearAuth();
|
clearAuth();
|
||||||
@@ -130,7 +124,7 @@ export function AuthProvider({ children }: { children: ReactNode }) {
|
|||||||
setAccessToken(null);
|
setAccessToken(null);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
}, [persistAuth, scheduleRefresh]);
|
||||||
|
|
||||||
// 初始化:检查已有 token 并尝试刷新
|
// 初始化:检查已有 token 并尝试刷新
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user