refactor: 优化用户授权组件的错误处理逻辑,简化代码结构

This commit is contained in:
wood chen 2025-02-21 16:40:42 +08:00
parent a5a9f2e779
commit 0ef9ae7903

View File

@ -1,9 +1,7 @@
"use client"; "use client";
import { useCallback, useEffect, useState } from "react"; import { useCallback, useEffect, useState } from "react";
import { useRouter } from "next/navigation";
import { signIn } from "@/actions/user-authorize"; import { signIn } from "@/actions/user-authorize";
import { useSession } from "next-auth/react";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
@ -18,8 +16,6 @@ export function UserAuthorize({
}: UserAuthorizeProps) { }: UserAuthorizeProps) {
const [isLoading, setIsLoading] = useState<boolean>(false); const [isLoading, setIsLoading] = useState<boolean>(false);
const [error, setError] = useState<Error | unknown>(null); const [error, setError] = useState<Error | unknown>(null);
const { update } = useSession();
const router = useRouter();
const signInCallback = useCallback(async () => { const signInCallback = useCallback(async () => {
if (isLoading) { if (isLoading) {
@ -27,26 +23,13 @@ export function UserAuthorize({
} }
setIsLoading(true); setIsLoading(true);
try { try {
// 从 URL 中获取 sso 和 sig 参数 await signIn(data);
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("缺少必要的认证参数");
}
// 直接调用signIn它会处理SSO回调中的return_sso_url
await signIn({ sso, sig });
// 更新session状态
await update();
setIsLoading(false); setIsLoading(false);
} catch (error) { } catch (error) {
console.error("登录过程出错:", error);
setError(error); setError(error);
setIsLoading(false); setIsLoading(false);
} }
}, [isLoading, update]); }, [data, isLoading]);
useEffect(() => { useEffect(() => {
const timer = setTimeout(signInCallback, 5); const timer = setTimeout(signInCallback, 5);
@ -55,8 +38,9 @@ export function UserAuthorize({
}; };
}, [signInCallback]); }, [signInCallback]);
if (error) {
return ( return (
<>
{error ? (
<Card className="w-full"> <Card className="w-full">
<CardHeader className="space-y-4 text-center"> <CardHeader className="space-y-4 text-center">
<div className="mx-auto flex h-16 w-16 items-center justify-center rounded-full bg-red-100"> <div className="mx-auto flex h-16 w-16 items-center justify-center rounded-full bg-red-100">
@ -74,16 +58,15 @@ export function UserAuthorize({
</p> </p>
</CardContent> </CardContent>
</Card> </Card>
); ) : (
}
return (
<Card className="w-full"> <Card className="w-full">
<CardHeader className="space-y-4 text-center"> <CardHeader className="space-y-4 text-center">
<div className="mx-auto flex h-16 w-16 items-center justify-center rounded-full bg-blue-100"> <div className="mx-auto flex h-16 w-16 items-center justify-center rounded-full bg-blue-100">
<div className="h-8 w-8 animate-spin rounded-full border-4 border-blue-600 border-t-transparent"></div> <div className="h-8 w-8 animate-spin rounded-full border-4 border-blue-600 border-t-transparent"></div>
</div> </div>
<CardTitle className="text-2xl font-semibold"></CardTitle> <CardTitle className="text-2xl font-semibold">
</CardTitle>
</CardHeader> </CardHeader>
<CardContent> <CardContent>
<p className="text-center text-gray-500"> <p className="text-center text-gray-500">
@ -91,5 +74,7 @@ export function UserAuthorize({
</p> </p>
</CardContent> </CardContent>
</Card> </Card>
)}
</>
); );
} }