'use client'; import Link from 'next/link'; import { useEffect, useState } from 'react'; import { useParams, useSearchParams } from 'next/navigation'; import { signIn } from '@/lib/auth-client'; import { getSsoProvider } from '@/lib/sso-providers'; export default function AuthProviderRedirectPage(): React.ReactElement { const params = useParams<{ provider: string }>(); const searchParams = useSearchParams(); const providerId = typeof params.provider === 'string' ? params.provider : ''; const provider = getSsoProvider(providerId); const callbackURL = searchParams.get('callbackURL') ?? '/chat'; const [error, setError] = useState(null); useEffect(() => { const currentProvider = provider; if (!currentProvider) { setError('Unknown SSO provider.'); return; } if (!currentProvider.enabled) { setError(`${currentProvider.buttonLabel} is not enabled in this deployment.`); return; } const activeProvider = currentProvider; let cancelled = false; async function redirectToProvider(): Promise { const result = await signIn.oauth2({ providerId: activeProvider.id, callbackURL, }); if (!cancelled && result?.error) { setError(result.error.message ?? `${activeProvider.buttonLabel} sign in failed.`); } } void redirectToProvider(); return () => { cancelled = true; }; }, [callbackURL, provider]); return (

Single sign-on

{provider ? `Redirecting you to ${provider.buttonLabel.replace('Continue with ', '')}...` : 'Preparing your sign-in request...'}

{error ? (

{error}

Return to login
) : (
If the redirect does not start automatically, return to the login page and try again.
)}
); }