"use client"; import { useCallback, useEffect, useState } from "react"; import { useRouter, useSearchParams } from "next/navigation"; import { getDiscourseSSOUrl } from "@/actions/discourse-sso-url"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { ErrorCard } from "@/components/auth/error-card"; export function Authorizing() { const router = useRouter(); const searchParams = useSearchParams(); const [error, setError] = useState(null); const [isLoading, setIsLoading] = useState(true); const signInCallback = useCallback(async () => { try { const url = await getDiscourseSSOUrl(searchParams.toString()); router.push(url); } catch (error) { setError(error); setIsLoading(false); } }, [router, searchParams]); useEffect(() => { // Delay 3s get sso url go to ... const timer = setTimeout(signInCallback, 3); return () => { clearTimeout(timer); }; }, [signInCallback]); if (error) { return (
授权失败

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

); } return (
正在处理授权

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

); }