diff --git a/apps/login/app/(login)/idp/[provider]/success/page.tsx b/apps/login/app/(login)/idp/[provider]/success/page.tsx index 6aae35bf68b..9d7777c429f 100644 --- a/apps/login/app/(login)/idp/[provider]/success/page.tsx +++ b/apps/login/app/(login)/idp/[provider]/success/page.tsx @@ -97,6 +97,7 @@ export default async function Page({ return retrieveIDPIntent(id, token) .then((resp) => { const { idpInformation, userId } = resp; + if (idpInformation) { // handle login if (userId) { @@ -166,10 +167,14 @@ export default async function Page({ }); } else { return ( -
-

Register

-

No id and token received!

-
+ +
+
+

Register

+

No id and token received!

+
+
+
); } } diff --git a/apps/login/app/(login)/mfa/page.tsx b/apps/login/app/(login)/mfa/page.tsx index 99bac281d46..b8a8d4683ac 100644 --- a/apps/login/app/(login)/mfa/page.tsx +++ b/apps/login/app/(login)/mfa/page.tsx @@ -77,6 +77,7 @@ export default async function Page({ loginName={loginName ?? sessionFactors.factors?.user?.loginName} displayName={sessionFactors.factors?.user?.displayName} showDropdown + searchParams={searchParams} > )} diff --git a/apps/login/app/(login)/mfa/set/page.tsx b/apps/login/app/(login)/mfa/set/page.tsx index 647d436fded..1625e9bb62f 100644 --- a/apps/login/app/(login)/mfa/set/page.tsx +++ b/apps/login/app/(login)/mfa/set/page.tsx @@ -80,6 +80,7 @@ export default async function Page({ loginName={loginName ?? sessionFactors.factors?.user?.loginName} displayName={sessionFactors.factors?.user?.displayName} showDropdown + searchParams={searchParams} > )} diff --git a/apps/login/app/(login)/otp/[method]/page.tsx b/apps/login/app/(login)/otp/[method]/page.tsx index 7dd15acf74a..3e1e5bb8401 100644 --- a/apps/login/app/(login)/otp/[method]/page.tsx +++ b/apps/login/app/(login)/otp/[method]/page.tsx @@ -1,6 +1,14 @@ -import { getBrandingSettings, getLoginSettings, server } from "#/lib/zitadel"; +import { + getBrandingSettings, + getLoginSettings, + getSession, + server, +} from "#/lib/zitadel"; +import Alert from "#/ui/Alert"; import DynamicTheme from "#/ui/DynamicTheme"; import LoginOTP from "#/ui/LoginOTP"; +import UserAvatar from "#/ui/UserAvatar"; +import { getMostRecentCookieWithLoginname } from "#/utils/cookies"; export default async function Page({ searchParams, @@ -14,8 +22,21 @@ export default async function Page({ const { method } = params; + const { session, token } = await loadSession(loginName, organization); + const branding = await getBrandingSettings(server, organization); + async function loadSession(loginName?: string, organization?: string) { + const recent = await getMostRecentCookieWithLoginname( + loginName, + organization + ); + + return getSession(server, recent.id, recent.token).then((response) => { + return { session: response?.session, token: recent.token }; + }); + } + return (
@@ -30,6 +51,24 @@ export default async function Page({

Enter the code you got via your email.

)} + {!session && ( +
+ + Could not get the context of the user. Make sure to enter the + username first or provide a loginName as searchParam. + +
+ )} + + {session && ( + + )} + {method && ( )} diff --git a/apps/login/app/(login)/passkey/add/page.tsx b/apps/login/app/(login)/passkey/add/page.tsx index 839ac222556..a955c51d6a3 100644 --- a/apps/login/app/(login)/passkey/add/page.tsx +++ b/apps/login/app/(login)/passkey/add/page.tsx @@ -45,6 +45,7 @@ export default async function Page({ loginName={loginName ?? sessionFactors.factors?.user?.loginName} displayName={sessionFactors.factors?.user?.displayName} showDropdown + searchParams={searchParams} > )}

{description}

diff --git a/apps/login/app/(login)/passkey/login/page.tsx b/apps/login/app/(login)/passkey/login/page.tsx index 68df9c6da54..3038fe7cb99 100644 --- a/apps/login/app/(login)/passkey/login/page.tsx +++ b/apps/login/app/(login)/passkey/login/page.tsx @@ -60,6 +60,7 @@ export default async function Page({ loginName={loginName ?? sessionFactors.factors?.user?.loginName} displayName={sessionFactors.factors?.user?.displayName} showDropdown + searchParams={searchParams} > )}

{description}

diff --git a/apps/login/app/(login)/password/page.tsx b/apps/login/app/(login)/password/page.tsx index 6c422bdbce9..473d46bd993 100644 --- a/apps/login/app/(login)/password/page.tsx +++ b/apps/login/app/(login)/password/page.tsx @@ -55,6 +55,7 @@ export default async function Page({ loginName={loginName ?? sessionFactors.factors?.user?.loginName} displayName={sessionFactors.factors?.user?.displayName} showDropdown + searchParams={searchParams} > )} diff --git a/apps/login/app/(login)/signedin/page.tsx b/apps/login/app/(login)/signedin/page.tsx index 4ee30a6c8d1..8f45b0d8189 100644 --- a/apps/login/app/(login)/signedin/page.tsx +++ b/apps/login/app/(login)/signedin/page.tsx @@ -43,6 +43,7 @@ export default async function Page({ searchParams }: { searchParams: any }) { loginName={loginName ?? sessionFactors?.factors?.user?.loginName} displayName={sessionFactors?.factors?.user?.displayName} showDropdown + searchParams={searchParams} >
diff --git a/apps/login/app/(login)/u2f/page.tsx b/apps/login/app/(login)/u2f/page.tsx index a5136657a85..91a0e5b1617 100644 --- a/apps/login/app/(login)/u2f/page.tsx +++ b/apps/login/app/(login)/u2f/page.tsx @@ -62,6 +62,7 @@ export default async function Page({ loginName={loginName ?? sessionFactors.factors?.user?.loginName} displayName={sessionFactors.factors?.user?.displayName} showDropdown + searchParams={searchParams} > )}

diff --git a/apps/login/app/(login)/u2f/set/page.tsx b/apps/login/app/(login)/u2f/set/page.tsx index 8ee325dffbf..0e46249f77a 100644 --- a/apps/login/app/(login)/u2f/set/page.tsx +++ b/apps/login/app/(login)/u2f/set/page.tsx @@ -42,6 +42,7 @@ export default async function Page({ loginName={loginName ?? sessionFactors.factors?.user?.loginName} displayName={sessionFactors.factors?.user?.displayName} showDropdown + searchParams={searchParams} > )}

{description}

diff --git a/apps/login/ui/UserAvatar.tsx b/apps/login/ui/UserAvatar.tsx index 053656d83d0..97591cc0662 100644 --- a/apps/login/ui/UserAvatar.tsx +++ b/apps/login/ui/UserAvatar.tsx @@ -6,13 +6,33 @@ type Props = { loginName?: string; displayName?: string; showDropdown: boolean; + searchParams?: Record; }; export default function UserAvatar({ loginName, displayName, showDropdown, + searchParams, }: Props) { + const params = new URLSearchParams({}); + + if (searchParams?.sessionId) { + params.set("sessionId", searchParams.sessionId); + } + + if (searchParams?.organization) { + params.set("organization", searchParams.organization); + } + + if (searchParams?.authRequestId) { + params.set("authRequestId", searchParams.authRequestId); + } + + if (searchParams?.loginName) { + params.set("loginName", searchParams.loginName); + } + return (
@@ -26,7 +46,7 @@ export default function UserAvatar({ {showDropdown && (