fix(web): login honors from-path redirect; me-error clears stored token

This commit is contained in:
2026-09-07 15:32:13 +08:00
parent c34289ebbe
commit b231b62720
2 changed files with 5 additions and 4 deletions
+4 -1
View File
@@ -26,7 +26,10 @@ export function AuthProvider({ children }: { children: ReactNode }) {
const meQ = useQuery({ queryKey: ["me"], queryFn: api.me, enabled: !!token, retry: 0 }); const meQ = useQuery({ queryKey: ["me"], queryFn: api.me, enabled: !!token, retry: 0 });
useEffect(() => { useEffect(() => {
if (token && meQ.isError) setTok(null); if (token && meQ.isError) {
setToken(null); // 非 401 失败也要清持久化 token,避免与 React 状态分叉导致 RequireAuth 永久加载
setTok(null);
}
}, [token, meQ.isError]); }, [token, meQ.isError]);
const value = useMemo<AuthState>( const value = useMemo<AuthState>(
+1 -3
View File
@@ -1,5 +1,5 @@
import { useState, type FormEvent } from "react"; import { useState, type FormEvent } from "react";
import { Navigate, useLocation, useNavigate } from "react-router-dom"; import { Navigate, useLocation } from "react-router-dom";
import { useAuth } from "../auth/AuthContext"; import { useAuth } from "../auth/AuthContext";
import { toast } from "../components/Toaster"; import { toast } from "../components/Toaster";
import { btnPrimary, card, input } from "../components/ui"; import { btnPrimary, card, input } from "../components/ui";
@@ -7,7 +7,6 @@ import { btnPrimary, card, input } from "../components/ui";
export default function Login() { export default function Login() {
const { login, user } = useAuth(); const { login, user } = useAuth();
const loc = useLocation() as { state?: { from?: string } }; const loc = useLocation() as { state?: { from?: string } };
const nav = useNavigate();
const [u, setU] = useState(""); const [u, setU] = useState("");
const [p, setP] = useState(""); const [p, setP] = useState("");
const [busy, setBusy] = useState(false); const [busy, setBusy] = useState(false);
@@ -19,7 +18,6 @@ export default function Login() {
setBusy(true); setBusy(true);
try { try {
await login(u, p); await login(u, p);
nav("/", { replace: true });
} catch (err) { } catch (err) {
toast("err", err instanceof Error ? err.message : "登录失败"); toast("err", err instanceof Error ? err.message : "登录失败");
} finally { } finally {