From 0b53644dd9811d32eff560fb7def4bcf6e046fb4 Mon Sep 17 00:00:00 2001 From: gbuomprisco Date: Tue, 22 Jul 2025 21:10:00 +0200 Subject: [PATCH] chore(version): bump version to 2.12.2 and refactor password update logic - Incremented version in package.json from 2.12.1 to 2.12.2. - Updated the UpdatePasswordPage component to utilize the new requireUser function for improved user session handling. - Refactored requireUser function to include a next parameter for redirecting after authentication failures, enhancing user experience. - Introduced a helper function getRedirectTo for cleaner redirect logic. --- apps/web/app/update-password/page.tsx | 15 +++++++++++++-- package.json | 2 +- packages/supabase/src/require-user.ts | 12 ++++++++++-- 3 files changed, 24 insertions(+), 5 deletions(-) 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}` : ''); +}