import { useEffect, useState } from "react" import { useSearchParams, useNavigate } from "react-router-dom" import { sectlAuth } from "../../services/sectlAuth" export function OAuthCallback() { const [searchParams] = useSearchParams() const navigate = useNavigate() const [status, setStatus] = useState<"processing" | "success" | "error">("processing") const [errorMessage, setErrorMessage] = useState("") useEffect(() => { const handleCallback = async () => { const code = searchParams.get("code") const error = searchParams.get("error") const errorDescription = searchParams.get("error_description") if (error) { setStatus("error") setErrorMessage(errorDescription || error) setTimeout(() => navigate("/"), 3000) return } if (code) { try { await sectlAuth.exchangeCodeForToken(code) setStatus("success") setTimeout(() => navigate("/"), 1500) } catch (err: any) { setStatus("error") setErrorMessage(err.message || "Token 交换失败") setTimeout(() => navigate("/"), 3000) } } else { setStatus("error") setErrorMessage("未收到授权码") setTimeout(() => navigate("/"), 3000) } } handleCallback() }, [searchParams, navigate]) return (
{status === "processing" &&
正在处理登录...
} {status === "success" &&
登录成功,正在跳转...
} {status === "error" && (
登录失败
{errorMessage}
)}
) }