diff --git a/packages/web/components/templates/auth/EmailLogin.tsx b/packages/web/components/templates/auth/EmailLogin.tsx index 62fc4847d..9f395bd13 100644 --- a/packages/web/components/templates/auth/EmailLogin.tsx +++ b/packages/web/components/templates/auth/EmailLogin.tsx @@ -1,7 +1,7 @@ import { HStack, SpanBox, VStack } from '../../elements/LayoutPrimitives' import { Button } from '../../elements/Button' import { StyledText, StyledTextSpan } from '../../elements/StyledText' -import { useEffect, useState } from 'react' +import { useEffect, useRef, useState } from 'react' import { BorderedFormInput, FormLabel } from '../../elements/FormElements' import { fetchEndpoint } from '../../../lib/appConfig' import { logoutMutation } from '../../../lib/networking/mutations/logoutMutation' @@ -9,13 +9,16 @@ import { useRouter } from 'next/router' import { parseErrorCodes } from '../../../lib/queryParamParser' import { formatMessage } from '../../../locales/en/messages' import Link from 'next/link' +import { Recaptcha } from '../../elements/Recaptcha' export function EmailLogin(): JSX.Element { const router = useRouter() const [email, setEmail] = useState(undefined) const [password, setPassword] = useState(undefined) - const [errorMessage, setErrorMessage] = - useState(undefined) + const [errorMessage, setErrorMessage] = useState( + undefined + ) + const recaptchaTokenRef = useRef(null) useEffect(() => { if (!router.isReady) return @@ -78,6 +81,25 @@ export function EmailLogin(): JSX.Element { + {process.env.NEXT_PUBLIC_RECAPTCHA_CHALLENGE_SITE_KEY && ( + <> + { + if (recaptchaTokenRef.current) { + recaptchaTokenRef.current.value = token + } else { + console.log('error updating recaptcha token') + } + }} + /> + + + )} + {errorMessage && {errorMessage}} - ); + ) } diff --git a/packages/web/pages/auth/email-login.tsx b/packages/web/pages/auth/email-login.tsx index ae36ba62b..56cc9bd38 100644 --- a/packages/web/pages/auth/email-login.tsx +++ b/packages/web/pages/auth/email-login.tsx @@ -1,15 +1,22 @@ import { PageMetaData } from '../../components/patterns/PageMetaData' import { ProfileLayout } from '../../components/templates/ProfileLayout' import { EmailLogin } from '../../components/templates/auth/EmailLogin' +import { GoogleReCaptchaProvider } from '@google-recaptcha/react' export default function EmailLoginPage(): JSX.Element { return ( <> - - - - -
+ + + + + +
+ ) }