From 68f7ea5ef04ab3d48db2b127042a99351c3bb12b Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Thu, 21 Nov 2024 14:12:13 +0100 Subject: [PATCH] cleanup register --- apps/login/src/app/(login)/register/page.tsx | 8 +-- apps/login/src/components/password-form.tsx | 4 -- ...without-password.tsx => register-form.tsx} | 10 ++-- apps/login/src/lib/server/password.ts | 58 +++++++++---------- 4 files changed, 35 insertions(+), 45 deletions(-) rename apps/login/src/components/{register-form-without-password.tsx => register-form.tsx} (93%) diff --git a/apps/login/src/app/(login)/register/page.tsx b/apps/login/src/app/(login)/register/page.tsx index 06cb928d9ad..00adc174b21 100644 --- a/apps/login/src/app/(login)/register/page.tsx +++ b/apps/login/src/app/(login)/register/page.tsx @@ -1,5 +1,5 @@ import { DynamicTheme } from "@/components/dynamic-theme"; -import { RegisterFormWithoutPassword } from "@/components/register-form-without-password"; +import { RegisterForm } from "@/components/register-form"; import { getBrandingSettings, getDefaultOrg, @@ -28,8 +28,6 @@ export default async function Page({ } } - const setPassword = !!(firstname && lastname && email); - const legal = await getLegalAndSupportSettings(organization); const passwordComplexitySettings = await getPasswordComplexitySettings(organization); @@ -54,7 +52,7 @@ export default async function Page({

{t("description")}

{legal && passwordComplexitySettings && ( - + > )} diff --git a/apps/login/src/components/password-form.tsx b/apps/login/src/components/password-form.tsx index 5885ecc6d44..8c715236491 100644 --- a/apps/login/src/components/password-form.tsx +++ b/apps/login/src/components/password-form.tsx @@ -73,10 +73,6 @@ export function PasswordForm({ setError(response.error); return; } - - if (response && response.nextStep) { - return router.push(response.nextStep); - } } async function resetPasswordAndContinue() { diff --git a/apps/login/src/components/register-form-without-password.tsx b/apps/login/src/components/register-form.tsx similarity index 93% rename from apps/login/src/components/register-form-without-password.tsx rename to apps/login/src/components/register-form.tsx index 19abe482a6a..0655a15f4be 100644 --- a/apps/login/src/components/register-form-without-password.tsx +++ b/apps/login/src/components/register-form.tsx @@ -39,7 +39,7 @@ type Props = { loginSettings?: LoginSettings; }; -export function RegisterFormWithoutPassword({ +export function RegisterForm({ legal, email, firstname, @@ -104,6 +104,7 @@ export function RegisterFormWithoutPassword({ registerParams.authRequestId = authRequestId; } + // redirect user to /register/password if password is chosen if (withPassword) { return router.push( `/register/password?` + new URLSearchParams(registerParams), @@ -116,7 +117,7 @@ export function RegisterFormWithoutPassword({ const { errors } = formState; const [tosAndPolicyAccepted, setTosAndPolicyAccepted] = useState(false); - + console.log(loginSettings); return (
@@ -188,8 +189,9 @@ export function RegisterFormWithoutPassword({ const usePasswordToContinue: boolean = loginSettings?.allowUsernamePassword && loginSettings?.passkeysType === PasskeysType.ALLOWED - ? !!!(selected.name === methods[0].name) - : !!loginSettings?.allowUsernamePassword; + ? !!!(selected.name === methods[0].name) // choose selection if both available + : !!loginSettings?.allowUsernamePassword; // if password is chosen + // set password as default if only password is allowed return submitAndContinue(values, usePasswordToContinue); })} data-testid="submit-button" diff --git a/apps/login/src/lib/server/password.ts b/apps/login/src/lib/server/password.ts index c01b7fb4dea..24ba10faf82 100644 --- a/apps/login/src/lib/server/password.ts +++ b/apps/login/src/lib/server/password.ts @@ -5,6 +5,7 @@ import { setSessionAndUpdateCookie, } from "@/lib/server/cookie"; import { + getLoginSettings, getUserByID, listAuthenticationMethodTypes, listUsers, @@ -20,6 +21,7 @@ import { User, UserState } from "@zitadel/proto/zitadel/user/v2/user_pb"; import { AuthenticationMethodType } from "@zitadel/proto/zitadel/user/v2/user_service_pb"; import { headers } from "next/headers"; import { redirect } from "next/navigation"; +import { getNextUrl } from "../client"; import { getSessionCookieByLoginName } from "../cookies"; type ResetPasswordCommand = { @@ -240,42 +242,34 @@ export async function sendPassword(command: UpdateSessionCommand) { // return router.push(`/passkey/set?` + params); // } else if (command.authRequestId && session.id) { - const params = new URLSearchParams({ - sessionId: session.id, - authRequest: command.authRequestId, - }); - - if (command.organization || session.factors?.user?.organizationId) { - params.append( - "organization", - command.organization ?? session.factors?.user?.organizationId, - ); - } - - return { nextStep: `/login?${params}` }; - } - - // without OIDC flow - const params = new URLSearchParams( - command.authRequestId - ? { - loginName: session.factors.user.loginName, - authRequestId: command.authRequestId, - organization: session.factors.user.organizationId, - } - : { - loginName: session.factors.user.loginName, - }, - ); - - if (command.organization || session.factors?.user?.organizationId) { - params.append( - "organization", + const loginSettings = await getLoginSettings( command.organization ?? session.factors?.user?.organizationId, ); + const nextUrl = await getNextUrl( + { + sessionId: session.id, + authRequestId: command.authRequestId, + organization: + command.organization ?? session.factors?.user?.organizationId, + }, + loginSettings?.defaultRedirectUri, + ); + + return redirect(nextUrl); } - return { nextStep: `/signedin?${params}` }; + const loginSettings = await getLoginSettings( + command.organization ?? session.factors?.user?.organizationId, + ); + const url = await getNextUrl( + { + loginName: session.factors.user.loginName, + organization: session.factors?.user?.organizationId, + }, + loginSettings?.defaultRedirectUri, + ); + + return redirect(url); } export async function changePassword(command: {