"use client"; import { useCallback, useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { signIn } from "@/actions/user-authorize"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; interface UserAuthorizeProps extends React.HTMLAttributes { data: Record; } export function UserAuthorize({ className, data, ...props }: UserAuthorizeProps) { const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); const router = useRouter(); const signInCallback = useCallback(async () => { if (isLoading) { return; } setIsLoading(true); try { // 从 URL 中获取 sso 和 sig 参数 const url = new URL(window.location.href); const sso = url.searchParams.get("sso"); const sig = url.searchParams.get("sig"); if (!sso || !sig) { throw new Error("缺少必要的认证参数"); } // 传递 SSO 参数 await signIn({ sso, sig, }); // 登录成功后刷新路由状态 router.refresh(); setIsLoading(false); } catch (error) { console.error("登录过程出错:", error); setError(error); setIsLoading(false); } }, [isLoading, router]); useEffect(() => { signInCallback(); }, [signInCallback]); if (error) { return (
授权失败

{error instanceof Error ? error.message : "登录异常,授权失败!请稍后重试。"}

); } return (
正在处理授权

{isLoading ? "请稍候,我们正在处理您的授权请求" : "正在跳转..."}

); }