diff --git a/apps/login/app/(login)/login/route.ts b/apps/login/app/(login)/login/route.ts index 5b7220cb927..e5ffc4ad741 100644 --- a/apps/login/app/(login)/login/route.ts +++ b/apps/login/app/(login)/login/route.ts @@ -43,25 +43,42 @@ export async function GET(request: NextRequest) { const sessionCookies: SessionCookie[] = await getAllSessions(); if (authRequestId && sessionId) { - const cookie = sessionCookies.find((cookie) => cookie.id === sessionId); + console.log( + `Login with session: ${sessionId} and authRequest: ${authRequestId}` + ); + const ids = sessionCookies.map((s) => s.id); - if (cookie && cookie.id && cookie.token) { - const session = { - sessionId: cookie?.id, - sessionToken: cookie?.token, - }; - const { callbackUrl } = await createCallback(server, { - authRequestId, - session, - }); - return NextResponse.redirect(callbackUrl); - } else { - const accountsUrl = new URL("/accounts", request.url); - accountsUrl.searchParams.set("authRequestId", authRequestId); - return NextResponse.redirect(accountsUrl); + let sessions: Session[] = []; + if (ids && ids.length) { + sessions = await loadSessions(ids); + } + + let selectedSession = sessions.find((s) => s.id === sessionId); + + if (selectedSession && selectedSession.id) { + console.log(`Found session ${selectedSession.id}`); + const cookie = sessionCookies.find( + (cookie) => cookie.id === selectedSession?.id + ); + + if (cookie && cookie.id && cookie.token) { + console.log(`Found sessioncookie ${cookie.id}`); + + const session = { + sessionId: cookie?.id, + sessionToken: cookie?.token, + }; + + const { callbackUrl } = await createCallback(server, { + authRequestId, + session, + }); + return NextResponse.redirect(callbackUrl); + } } } if (authRequestId) { + console.log(`Login with authRequest: ${authRequestId}`); const { authRequest } = await getAuthRequest(server, { authRequestId }); const ids = sessionCookies.map((s) => s.id); @@ -122,17 +139,19 @@ export async function GET(request: NextRequest) { } } else { const loginNameUrl = new URL("/loginname", request.url); - if (authRequest?.id) { - loginNameUrl.searchParams.set("authRequestId", authRequest?.id); - if (authRequest.loginHint) { - loginNameUrl.searchParams.set("loginName", authRequest.loginHint); - loginNameUrl.searchParams.set("submit", "true"); // autosubmit - } + + loginNameUrl.searchParams.set("authRequestId", authRequestId); + if (authRequest?.loginHint) { + loginNameUrl.searchParams.set("loginName", authRequest.loginHint); + loginNameUrl.searchParams.set("submit", "true"); // autosubmit } return NextResponse.redirect(loginNameUrl); } } else { - return NextResponse.error(); + return NextResponse.json( + { error: "No authRequestId provided" }, + { status: 500 } + ); } } diff --git a/apps/login/ui/SessionItem.tsx b/apps/login/ui/SessionItem.tsx index 472246303ff..e3f81d9471d 100644 --- a/apps/login/ui/SessionItem.tsx +++ b/apps/login/ui/SessionItem.tsx @@ -40,32 +40,6 @@ export default function SessionItem({ } } - // async function loginSession(authRequestId: string, sessionId: string) { - // setLoading(true); - // const res = await fetch( - // "/api/login?" + new URLSearchParams({ sessionId, authRequestId }), - // { - // method: "DELETE", - // headers: { - // "Content-Type": "application/json", - // }, - // body: JSON.stringify({ - // id: id, - // }), - // } - // ); - - // const response = await res.json(); - - // setLoading(false); - // if (!res.ok) { - // // setError(response.details); - // return Promise.reject(response); - // } else { - // return response; - // } - // } - const validPassword = session?.factors?.password?.verifiedAt; const validPasskey = session?.factors?.webAuthN?.verifiedAt;