ci: Prettier纳入两层防御体系 (#520)
CI Build & Deploy Pipeline / Staging E2E Tests (push) Failing after 2m50s
CI Build & Deploy Pipeline / Production Browser E2E (push) Failing after 1437h19m24s
CI Build & Deploy Pipeline / Build Production Web Image (push) Failing after 1437h19m26s
CI Build & Deploy Pipeline / Deploy Production (push) Failing after 1437h19m25s
CI Build & Deploy Pipeline / Build Production API Image (push) Failing after 1437h19m26s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 1437h21m16s
CI Build & Deploy Pipeline / Build Staging API Image (push) Has been skipped
CI Build & Deploy Pipeline / Build Staging Web Image (push) Has been skipped
CI Build & Deploy Pipeline / Build Staging Worker Image (push) Has been skipped
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration Tests (push) Has been skipped
CI Build & Deploy Pipeline / Build Production Worker Image (push) Failing after 1437h51m29s
CI/CD Pipeline / Validate Code Quality And Tests (push) Has been skipped
CI/CD Pipeline / Unit Tests (push) Has been skipped
CI/CD Pipeline / Integration Tests (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Has been skipped

Co-authored-by: xiaoxia <dev@xiaoxiajianji.com>
Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
This commit was merged in pull request #520.
This commit is contained in:
2026-07-18 18:08:19 +08:00
committed by auto-approve-bot
parent 1ee779a566
commit 0fcb77b991
145 changed files with 10310 additions and 12869 deletions
+41 -41
View File
@@ -1,94 +1,94 @@
/**
* 认证相关 Hooks
*/
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { useNavigate } from "react-router-dom";
import * as authApi from "@/api/auth";
import { useAuthStore } from "@/store/authStore";
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"
import { useNavigate } from "react-router-dom"
import * as authApi from "@/api/auth"
import { useAuthStore } from "@/store/authStore"
// 登录 Hook
export const useLogin = () => {
const navigate = useNavigate();
const setAuth = useAuthStore((state) => state.setAuth);
const navigate = useNavigate()
const setAuth = useAuthStore((state) => state.setAuth)
const mutation = useMutation({
mutationFn: authApi.login,
});
})
// 手动处理成功后的逻辑
const login = async (credentials: Parameters<typeof authApi.login>[0]) => {
const data = await mutation.mutateAsync(credentials);
const refreshToken = data.refresh_token ?? null;
const data = await mutation.mutateAsync(credentials)
const refreshToken = data.refresh_token ?? null
// 先保存 token
localStorage.setItem("access_token", data.access_token);
localStorage.setItem("access_token", data.access_token)
if (refreshToken) {
localStorage.setItem("refresh_token", refreshToken);
localStorage.setItem("refresh_token", refreshToken)
} else {
localStorage.removeItem("refresh_token");
localStorage.removeItem("refresh_token")
}
// 获取用户信息
const user = await authApi.getCurrentUser();
setAuth(user, data.access_token, refreshToken);
navigate("/");
return data;
};
const user = await authApi.getCurrentUser()
setAuth(user, data.access_token, refreshToken)
navigate("/")
return data
}
return { ...mutation, mutateAsync: login };
};
return { ...mutation, mutateAsync: login }
}
// 注册 Hook
export const useRegister = () => {
const navigate = useNavigate();
const navigate = useNavigate()
const mutation = useMutation({
mutationFn: authApi.register,
});
})
const register = async (data: Parameters<typeof authApi.register>[0]) => {
const result = await mutation.mutateAsync(data);
const result = await mutation.mutateAsync(data)
navigate("/login", {
state: { message: "注册成功!请查收验证邮件。" },
});
return result;
};
})
return result
}
return { ...mutation, mutateAsync: register };
};
return { ...mutation, mutateAsync: register }
}
// 登出 Hook
export const useLogout = () => {
const navigate = useNavigate();
const clearAuth = useAuthStore((state) => state.clearAuth);
const queryClient = useQueryClient();
const navigate = useNavigate()
const clearAuth = useAuthStore((state) => state.clearAuth)
const queryClient = useQueryClient()
const mutation = useMutation({
mutationFn: authApi.logout,
});
})
const logout = async () => {
try {
await mutation.mutateAsync();
await mutation.mutateAsync()
} catch (error) {
// 即使登出失败也清除本地状态
} finally {
clearAuth();
queryClient.clear();
navigate("/");
clearAuth()
queryClient.clear()
navigate("/")
}
};
}
return { ...mutation, mutateAsync: logout };
};
return { ...mutation, mutateAsync: logout }
}
// 获取当前用户 Hook
export const useCurrentUser = () => {
const isAuthenticated = useAuthStore((state) => state.isAuthenticated);
const isAuthenticated = useAuthStore((state) => state.isAuthenticated)
return useQuery({
queryKey: ["currentUser"],
queryFn: authApi.getCurrentUser,
enabled: isAuthenticated,
});
};
})
}