diff --git a/apps/web/app/auth/callback/error/page.tsx b/apps/web/app/auth/callback/error/page.tsx index 18961fc29..779de670b 100644 --- a/apps/web/app/auth/callback/error/page.tsx +++ b/apps/web/app/auth/callback/error/page.tsx @@ -1,9 +1,12 @@ +import Link from 'next/link'; import { redirect } from 'next/navigation'; import { Alert, AlertDescription, AlertTitle } from '@kit/ui/alert'; import { Button } from '@kit/ui/button'; import { Trans } from '@kit/ui/trans'; +import pathsConfig from '~/config/paths.config'; + interface Params { searchParams: { error: string; @@ -15,7 +18,7 @@ function AuthCallbackErrorPage({ searchParams }: Params) { // if there is no error, redirect the user to the sign-in page if (!error) { - redirect('/auth/sign-in'); + redirect(pathsConfig.auth.signIn); } return ( @@ -32,15 +35,11 @@ function AuthCallbackErrorPage({ searchParams }: Params) { - - -
- -
+ ); } diff --git a/apps/web/app/auth/sign-up/page.tsx b/apps/web/app/auth/sign-up/page.tsx index 8c5792a15..e42570e14 100644 --- a/apps/web/app/auth/sign-up/page.tsx +++ b/apps/web/app/auth/sign-up/page.tsx @@ -37,6 +37,7 @@ function SignUpPage({ searchParams }: Props) { providers={authConfig.providers} paths={{ callback: pathsConfig.auth.callback, + appHome: pathsConfig.app.home, }} inviteToken={inviteToken} /> diff --git a/apps/web/app/auth/verify/page.tsx b/apps/web/app/auth/verify/page.tsx index bf5c1e308..40424969d 100644 --- a/apps/web/app/auth/verify/page.tsx +++ b/apps/web/app/auth/verify/page.tsx @@ -8,6 +8,12 @@ import pathsConfig from '~/config/paths.config'; import { createI18nServerInstance } from '~/lib/i18n/i18n.server'; import { withI18n } from '~/lib/i18n/with-i18n'; +interface Props { + searchParams: { + next?: string; + }; +} + export const generateMetadata = async () => { const i18n = await createI18nServerInstance(); @@ -16,7 +22,7 @@ export const generateMetadata = async () => { }; }; -async function VerifyPage() { +async function VerifyPage(props: Props) { const client = getSupabaseServerComponentClient(); const needsMfa = await checkRequiresMultiFactorAuthentication(client); @@ -24,10 +30,12 @@ async function VerifyPage() { redirect(pathsConfig.auth.signIn); } + const redirectPath = props.searchParams.next ?? pathsConfig.app.home; + return ( { - console.log('2'); + paths={{ + redirectPath, }} /> ); diff --git a/packages/features/auth/src/components/multi-factor-challenge-container.tsx b/packages/features/auth/src/components/multi-factor-challenge-container.tsx index beb02dfbc..cffcfbf17 100644 --- a/packages/features/auth/src/components/multi-factor-challenge-container.tsx +++ b/packages/features/auth/src/components/multi-factor-challenge-container.tsx @@ -3,6 +3,8 @@ import type { FormEventHandler } from 'react'; import { useCallback, useEffect, useState } from 'react'; +import { useRouter } from 'next/navigation'; + import { useMutation } from '@tanstack/react-query'; import useFetchAuthFactors from '@kit/supabase/hooks/use-fetch-mfa-factors'; @@ -17,14 +19,22 @@ import Spinner from '@kit/ui/spinner'; import { Trans } from '@kit/ui/trans'; export function MultiFactorChallengeContainer({ - onSuccess, + paths, }: React.PropsWithChildren<{ - onSuccess: () => void; + paths: { + redirectPath: string; + }; }>) { + const router = useRouter(); + const [factorId, setFactorId] = useState(''); const [verifyCode, setVerifyCode] = useState(''); const verifyMFAChallenge = useVerifyMFAChallenge(); + const onSuccess = useCallback(() => { + router.replace(paths.redirectPath); + }, [router, paths.redirectPath]); + const onSubmitClicked: FormEventHandler = useCallback( (event) => { void (async () => { diff --git a/packages/features/auth/src/components/sign-up-methods-container.tsx b/packages/features/auth/src/components/sign-up-methods-container.tsx index 0908ed3f7..312bc2836 100644 --- a/packages/features/auth/src/components/sign-up-methods-container.tsx +++ b/packages/features/auth/src/components/sign-up-methods-container.tsx @@ -2,8 +2,7 @@ import type { Provider } from '@supabase/supabase-js'; -import { isBrowser } from '@supabase/ssr'; - +import { isBrowser } from '@kit/shared/utils'; import { Divider } from '@kit/ui/divider'; import { If } from '@kit/ui/if';