import { useEffect, useState } from 'react'; import { ErrorTypes, registerPage } from 'librechat-data-provider'; import { OpenIDIcon, useToastContext } from '@librechat/client'; import { useOutletContext, useSearchParams } from 'react-router-dom'; import type { TLoginLayoutContext } from '~/common'; import { ErrorMessage } from '~/components/Auth/ErrorMessage'; import SocialButton from '~/components/Auth/SocialButton'; import { useAuthContext } from '~/hooks/AuthContext'; import { getLoginError } from '~/utils'; import { useLocalize } from '~/hooks'; import LoginForm from './LoginForm'; function Login() { const localize = useLocalize(); const { showToast } = useToastContext(); const { error, setError, login } = useAuthContext(); const { startupConfig } = useOutletContext(); const [searchParams, setSearchParams] = useSearchParams(); // Determine if auto-redirect should be disabled based on the URL parameter const disableAutoRedirect = searchParams.get('redirect') === 'false'; // Persist the disable flag locally so that once detected, auto-redirect stays disabled. const [isAutoRedirectDisabled, setIsAutoRedirectDisabled] = useState(disableAutoRedirect); useEffect(() => { const oauthError = searchParams?.get('error'); if (oauthError && oauthError === ErrorTypes.AUTH_FAILED) { showToast({ message: localize('com_auth_error_oauth_failed'), status: 'error', }); const newParams = new URLSearchParams(searchParams); newParams.delete('error'); setSearchParams(newParams, { replace: true }); } }, [searchParams, setSearchParams, showToast, localize]); // Once the disable flag is detected, update local state and remove the parameter from the URL. useEffect(() => { if (disableAutoRedirect) { setIsAutoRedirectDisabled(true); const newParams = new URLSearchParams(searchParams); newParams.delete('redirect'); setSearchParams(newParams, { replace: true }); } }, [disableAutoRedirect, searchParams, setSearchParams]); // Determine whether we should auto-redirect to OpenID. const shouldAutoRedirect = startupConfig?.openidLoginEnabled && startupConfig?.openidAutoRedirect && startupConfig?.serverDomain && !isAutoRedirectDisabled; useEffect(() => { if (shouldAutoRedirect) { console.log('Auto-redirecting to OpenID provider...'); window.location.href = `${startupConfig.serverDomain}/oauth/openid`; } }, [shouldAutoRedirect, startupConfig]); // Render fallback UI if auto-redirect is active. if (shouldAutoRedirect) { return (

{localize('com_ui_redirecting_to_provider', { 0: startupConfig.openidLabel })}

startupConfig.openidImageUrl ? ( OpenID Logo ) : ( ) } label={startupConfig.openidLabel} id="openid" />
); } return ( <> {error != null && {localize(getLoginError(error))}} {startupConfig?.emailLoginEnabled === true && ( )} {startupConfig?.registrationEnabled === true && (

{' '} {localize('com_auth_no_account')}{' '} {localize('com_auth_sign_up')}

)} ); } export default Login;