Skip to content

Commit 5a2d4a2

Browse files
eozden-wqLordfirespeed
authored andcommitted
Reworked session handling at beginOAuth2Flow to handle original location, added original destination to url query param in redirectUnauthenticatd (client middleware)
1 parent 5e9454b commit 5a2d4a2

2 files changed

Lines changed: 14 additions & 5 deletions

File tree

client/src/middleware.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ async function getUserProfile(request: NextRequest): Promise<User | null> {
2424
return userProfile?.data ?? null
2525
}
2626

27-
function redirectUnauthenticated(_request: NextRequest) {
28-
return NextResponse.redirect(new URL("/auth/keycloak/login", siteConfig.apiUrl))
27+
function redirectUnauthenticated(request: NextRequest) {
28+
const loginUrl = new URL(`/auth/keycloak/login?destination=${request.url}`, siteConfig.apiUrl)
29+
return NextResponse.redirect(loginUrl)
2930
}
3031

3132
function redirectForbidden(request: NextRequest) {

server/src/routes/auth/keycloak/keycloak-handlers.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,20 @@ export class KeycloakHandlers {
5959
return codeVerifier
6060
}
6161

62+
private static rememberDestination(request: Request, response: Response, session: DurHackSession): void {
63+
const destination = request.query.destination != null ? destinationUrlSchema.parse(request.query.destination) : null
64+
65+
if (session.redirectTo == null && destination?.href == null) return
66+
if (session.redirectTo === destination?.href) return
67+
68+
session.redirectTo = destination?.href
69+
response.sessionDirty = true
70+
}
71+
6272
beginOAuth2Flow(): Middleware {
6373
return async (request: Request, response: Response) => {
64-
const destination =
65-
request.query.destination != null ? destinationUrlSchema.parse(request.query.destination) : null
6674
const session = await getSession(request, response)
67-
session.redirectTo = destination?.href
75+
KeycloakHandlers.rememberDestination(request, response, session)
6876

6977
this.lazyLogout(response, session)
7078
const codeVerifier = this.getOrGenerateCodeVerifier(response, session)

0 commit comments

Comments
 (0)