Skip to content

Commit 8348564

Browse files
committed
feat(login) Redirect after login
1 parent bc044d9 commit 8348564

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

src/runtime/server/handler/callback.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ function callbackEventHandler({ onSuccess }: OAuthConfig<UserSession>) {
3030
const session = await useAuthSession(event, config.sessionConfiguration?.maxAuthSessionAge)
3131

3232
const { code, state, id_token, admin_consent, error, error_description }: { code: string; state: string; id_token: string; admin_consent: string; error: string; error_description: string } = event.method === 'POST' ? await readBody(event) : getQuery(event)
33+
let stateObj: { token: string; additionalClientAuthParameters: Record<string, string> } | null = null;
34+
try {
35+
stateObj = typeof state === "string" ? JSON.parse(state) : state;
36+
} catch {
37+
stateObj = null;
38+
}
3339

3440
// Check for admin consent callback
3541
if (admin_consent) {
@@ -57,7 +63,7 @@ function callbackEventHandler({ onSuccess }: OAuthConfig<UserSession>) {
5763
}
5864

5965
// Check for valid state
60-
if (config.state && (state !== session.data.state)) {
66+
if (config.state && (stateObj?.token! !== session.data.state.token!)) {
6167
oidcErrorHandler(event, 'State mismatch')
6268
}
6369

@@ -215,7 +221,8 @@ function callbackEventHandler({ onSuccess }: OAuthConfig<UserSession>) {
215221
deleteCookie(event, 'oidc')
216222
return onSuccess(event, {
217223
user,
218-
callbackRedirectUrl: config.callbackRedirectUrl as string,
224+
callbackRedirectUrl: (stateObj?.additionalClientAuthParameters?.redirectUriOverride ??
225+
(config.callbackRedirectUrl as string)),
219226
})
220227
})
221228
}

src/runtime/server/handler/login.get.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,6 @@ function loginEventHandler() {
2525
// Initialize auth session
2626
const session = await useAuthSession(event, config.sessionConfiguration?.maxAuthSessionAge)
2727
await session.clear()
28-
await session.update({
29-
state: generateRandomUrlSafeString(),
30-
codeVerifier: generatePkceVerifier(),
31-
referer: getRequestHeader(event, 'referer'),
32-
nonce: undefined,
33-
})
34-
3528
// Get client side query parameters
3629
const additionalClientAuthParameters: Record<string, string> = {}
3730
if (config.allowedClientAuthParameters?.length) {
@@ -43,6 +36,18 @@ function loginEventHandler() {
4336
})
4437
}
4538

39+
const state = {
40+
token: generateRandomUrlSafeString(),
41+
additionalClientAuthParameters: additionalClientAuthParameters
42+
}
43+
44+
await session.update({
45+
state,
46+
codeVerifier: generatePkceVerifier(),
47+
referer: getRequestHeader(event, 'referer'),
48+
nonce: undefined,
49+
})
50+
4651
let clientRedirectUri: string | undefined
4752
if (config.allowedCallbackRedirectUrls?.length) {
4853
const clientQueryParams = getQuery(event)

0 commit comments

Comments
 (0)