diff --git a/apps/login/src/components/change-password-form.tsx b/apps/login/src/components/change-password-form.tsx index 7a08687ac02..e43e71f7528 100644 --- a/apps/login/src/components/change-password-form.tsx +++ b/apps/login/src/components/change-password-form.tsx @@ -64,6 +64,7 @@ export function ChangePasswordForm({ }) .catch(() => { setError("Could not change password"); + return; }) .finally(() => { setLoading(false); diff --git a/apps/login/src/components/login-otp.tsx b/apps/login/src/components/login-otp.tsx index 74c0c0b2624..27fa187c7d3 100644 --- a/apps/login/src/components/login-otp.tsx +++ b/apps/login/src/components/login-otp.tsx @@ -63,6 +63,7 @@ export function LoginOTP({ updateSessionForOTPChallenge() .catch((error) => { setError(error); + return; }) .finally(() => { setLoading(false); @@ -95,6 +96,7 @@ export function LoginOTP({ }) .catch((error) => { setError(error.message ?? "Could not request OTP challenge"); + return; }) .finally(() => { setLoading(false); @@ -202,6 +204,7 @@ export function LoginOTP({ updateSessionForOTPChallenge() .catch((error) => { setError(error); + return; }) .finally(() => { setLoading(false); diff --git a/apps/login/src/components/login-passkey.tsx b/apps/login/src/components/login-passkey.tsx index dda6b1ef567..d72749e7572 100644 --- a/apps/login/src/components/login-passkey.tsx +++ b/apps/login/src/components/login-passkey.tsx @@ -67,6 +67,7 @@ export function LoginPasskey({ return submitLoginAndContinue(pK) .catch((error) => { setError(error); + return; }) .finally(() => { setLoading(false); @@ -74,6 +75,7 @@ export function LoginPasskey({ }) .catch((error) => { setError(error); + return; }) .finally(() => { setLoading(false); @@ -102,6 +104,7 @@ export function LoginPasskey({ }) .catch(() => { setError("Could not request passkey challenge"); + return; }) .finally(() => { setLoading(false); @@ -123,6 +126,7 @@ export function LoginPasskey({ }) .catch(() => { setError("Could not verify passkey"); + return; }) .finally(() => { setLoading(false); @@ -151,7 +155,6 @@ export function LoginPasskey({ }) .then((assertedCredential: any) => { if (!assertedCredential) { - setLoading(false); setError("An error on retrieving passkey"); return; } @@ -204,6 +207,9 @@ export function LoginPasskey({ router.push(url); } }); + }) + .finally(() => { + setLoading(false); }); } @@ -275,6 +281,7 @@ export function LoginPasskey({ return submitLoginAndContinue(pK) .catch((error) => { setError(error); + return; }) .finally(() => { setLoading(false); diff --git a/apps/login/src/components/register-passkey.tsx b/apps/login/src/components/register-passkey.tsx index f353b57e689..9a718302610 100644 --- a/apps/login/src/components/register-passkey.tsx +++ b/apps/login/src/components/register-passkey.tsx @@ -53,6 +53,7 @@ export function RegisterPasskey({ }) .catch(() => { setError("Could not verify Passkey"); + return; }) .finally(() => { setLoading(false); @@ -68,6 +69,7 @@ export function RegisterPasskey({ }) .catch(() => { setError("Could not register passkey"); + return; }) .finally(() => { setLoading(false); diff --git a/apps/login/src/components/register-u2f.tsx b/apps/login/src/components/register-u2f.tsx index 8c8cd503d9b..ba83de3627a 100644 --- a/apps/login/src/components/register-u2f.tsx +++ b/apps/login/src/components/register-u2f.tsx @@ -54,6 +54,7 @@ export function RegisterU2f({ }) .catch(() => { setError("An error on verifying passkey occurred"); + return; }) .finally(() => { setLoading(false); @@ -61,6 +62,7 @@ export function RegisterU2f({ if (response && "error" in response && response?.error) { setError(response?.error); + return; } return response; @@ -74,6 +76,7 @@ export function RegisterU2f({ }) .catch(() => { setError("An error on registering passkey"); + return; }) .finally(() => { setLoading(false); @@ -81,6 +84,7 @@ export function RegisterU2f({ if (response && "error" in response && response?.error) { setError(response?.error); + return; } if (!response || !("u2fId" in response)) { diff --git a/apps/login/src/components/session-item.tsx b/apps/login/src/components/session-item.tsx index 1f864d49294..ff5dea3230e 100644 --- a/apps/login/src/components/session-item.tsx +++ b/apps/login/src/components/session-item.tsx @@ -44,6 +44,7 @@ export function SessionItem({ }) .catch((error) => { setError(error.message); + return; }) .finally(() => { setLoading(false); @@ -73,6 +74,7 @@ export function SessionItem({ }) .catch(() => { setError("An internal error occurred"); + return; }) .finally(() => { setLoading(false); @@ -84,6 +86,7 @@ export function SessionItem({ if (res?.error) { setError(res.error); + return; } } }} diff --git a/apps/login/src/components/set-register-password-form.tsx b/apps/login/src/components/set-register-password-form.tsx index 21ad533854b..71fe089c7e2 100644 --- a/apps/login/src/components/set-register-password-form.tsx +++ b/apps/login/src/components/set-register-password-form.tsx @@ -68,6 +68,7 @@ export function SetRegisterPasswordForm({ }) .catch(() => { setError("Could not register user"); + return; }) .finally(() => { setLoading(false); diff --git a/apps/login/src/components/sign-in-with-idp.tsx b/apps/login/src/components/sign-in-with-idp.tsx index e19564b81a6..6375c3e3746 100644 --- a/apps/login/src/components/sign-in-with-idp.tsx +++ b/apps/login/src/components/sign-in-with-idp.tsx @@ -56,6 +56,7 @@ export function SignInWithIdp({ }) .catch(() => { setError("Could not start IDP flow"); + return; }) .finally(() => { setLoading(false); diff --git a/apps/login/src/components/totp-register.tsx b/apps/login/src/components/totp-register.tsx index e8519981715..e3b5985aea2 100644 --- a/apps/login/src/components/totp-register.tsx +++ b/apps/login/src/components/totp-register.tsx @@ -98,6 +98,7 @@ export function TotpRegister({ }) .catch((e) => { setError(e.message); + return; }) .finally(() => { setLoading(false); diff --git a/apps/login/src/components/username-form.tsx b/apps/login/src/components/username-form.tsx index 9cc3faab44d..366ce019470 100644 --- a/apps/login/src/components/username-form.tsx +++ b/apps/login/src/components/username-form.tsx @@ -55,6 +55,7 @@ export function UsernameForm({ }) .catch(() => { setError("An internal error occurred"); + return; }) .finally(() => { setLoading(false); @@ -66,6 +67,7 @@ export function UsernameForm({ if (res?.error) { setError(res.error); + return; } return res; diff --git a/apps/login/src/components/verify-form.tsx b/apps/login/src/components/verify-form.tsx index 54976ac32a7..137dbbb1ea8 100644 --- a/apps/login/src/components/verify-form.tsx +++ b/apps/login/src/components/verify-form.tsx @@ -3,6 +3,7 @@ import { Alert } from "@/components/alert"; import { resendVerification, sendVerification } from "@/lib/server/email"; import { useTranslations } from "next-intl"; +import { redirect } from "next/navigation"; import { useCallback, useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { Button, ButtonVariants } from "./button"; @@ -59,7 +60,7 @@ export function VerifyForm({ userId, code, isInvite, params }: Props) { ): Promise { setLoading(true); - await sendVerification({ + const response = await sendVerification({ code: value.code, userId, isInvite: isInvite, @@ -71,6 +72,15 @@ export function VerifyForm({ userId, code, isInvite, params }: Props) { .finally(() => { setLoading(false); }); + + if (response?.error) { + setError(response.error); + return; + } + + if (response?.redirect) { + redirect(response?.redirect); + } }, [isInvite, userId], ); diff --git a/apps/login/src/lib/server/email.ts b/apps/login/src/lib/server/email.ts index d2ab8496c34..e5a1529660f 100644 --- a/apps/login/src/lib/server/email.ts +++ b/apps/login/src/lib/server/email.ts @@ -10,7 +10,6 @@ import { } from "@/lib/zitadel"; import { create } from "@zitadel/client"; import { ChecksSchema } from "@zitadel/proto/zitadel/session/v2/session_service_pb"; -import { redirect } from "next/navigation"; import { createSessionAndUpdateCookie } from "./cookie"; type VerifyUserByEmailCommand = { @@ -74,7 +73,7 @@ export async function sendVerification(command: VerifyUserByEmailCommand) { if (session.factors?.user?.loginName) { params.set("loginName", session.factors?.user?.loginName); } - return redirect(`/authenticator/set?${params}`); + return { redirect: `/authenticator/set?${params}` }; } } @@ -134,6 +133,6 @@ export async function sendVerificationRedirectWithoutCheck(command: { if (session.factors?.user?.loginName) { params.set("loginName", session.factors?.user?.loginName); } - return redirect(`/authenticator/set?${params}`); + return { redirect: `/authenticator/set?${params}` }; } }