diff --git a/apps/web/app/update-password/page.tsx b/apps/web/app/update-password/page.tsx index f78bbd752..38283c48f 100644 --- a/apps/web/app/update-password/page.tsx +++ b/apps/web/app/update-password/page.tsx @@ -1,11 +1,14 @@ +import { redirect } from 'next/navigation'; + import { UpdatePasswordForm } from '@kit/auth/password-reset'; import { AuthLayoutShell } from '@kit/auth/shared'; +import { requireUser } from '@kit/supabase/require-user'; +import { getSupabaseServerClient } from '@kit/supabase/server-client'; import { AppLogo } from '~/components/app-logo'; import pathsConfig from '~/config/paths.config'; import { createI18nServerInstance } from '~/lib/i18n/i18n.server'; import { withI18n } from '~/lib/i18n/with-i18n'; -import { requireUserInServerComponent } from '~/lib/server/require-user-in-server-component'; export const generateMetadata = async () => { const { t } = await createI18nServerInstance(); @@ -24,7 +27,15 @@ interface UpdatePasswordPageProps { } async function UpdatePasswordPage(props: UpdatePasswordPageProps) { - await requireUserInServerComponent(); + const client = getSupabaseServerClient(); + + const result = await requireUser(client, { + next: pathsConfig.auth.passwordUpdate, + }); + + if (result.error) { + return redirect(result.redirectTo); + } const { callback } = await props.searchParams; const redirectTo = callback ?? pathsConfig.app.home; diff --git a/package.json b/package.json index fddd4aab7..d6d45cc71 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "next-supabase-saas-kit-turbo", - "version": "2.12.1", + "version": "2.12.2", "private": true, "sideEffects": false, "engines": { diff --git a/packages/supabase/src/require-user.ts b/packages/supabase/src/require-user.ts index 2da976141..ea12c997f 100644 --- a/packages/supabase/src/require-user.ts +++ b/packages/supabase/src/require-user.ts @@ -30,11 +30,15 @@ type UserClaims = { * @name requireUser * @description Require a session to be present in the request * @param client + * @param options + * @param options.verifyMfa + * @param options.next */ export async function requireUser( client: SupabaseClient, options?: { verifyMfa?: boolean; + next?: string; }, ): Promise< | { @@ -60,7 +64,7 @@ export async function requireUser( return { data: null, error: new AuthenticationError(), - redirectTo: SIGN_IN_PATH, + redirectTo: getRedirectTo(SIGN_IN_PATH, options?.next), }; } @@ -75,7 +79,7 @@ export async function requireUser( return { data: null, error: new MultiFactorAuthError(), - redirectTo: MULTI_FACTOR_AUTH_VERIFY_PATH, + redirectTo: getRedirectTo(MULTI_FACTOR_AUTH_VERIFY_PATH, options?.next), }; } } @@ -108,3 +112,7 @@ export class MultiFactorAuthError extends Error { super(`Multi-factor authentication required`); } } + +function getRedirectTo(path: string, next?: string) { + return path + (next ? `?next=${next}` : ''); +}