Skip to content

Commit 46d19f6

Browse files
authored
fix: emit event session logout before update local data
1 parent 9d09992 commit 46d19f6

File tree

2 files changed

+20
-8
lines changed

2 files changed

+20
-8
lines changed

modules/session_guard/guard.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -467,14 +467,6 @@ export class SessionGuard<
467467
}
468468
}
469469

470-
/**
471-
* Update local state
472-
*/
473-
this.user = undefined
474-
this.viaRemember = false
475-
this.isAuthenticated = false
476-
this.isLoggedOut = true
477-
478470
/**
479471
* Notify the user has been logged out
480472
*/
@@ -484,6 +476,14 @@ export class SessionGuard<
484476
user: this.user || null,
485477
sessionId: session.sessionId,
486478
})
479+
480+
/**
481+
* Update local state
482+
*/
483+
this.user = undefined
484+
this.viaRemember = false
485+
this.isAuthenticated = false
486+
this.isLoggedOut = true
487487
}
488488

489489
/**

tests/session/guard/logout.spec.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ test.group('Session guard | logout', () => {
2424
test('delete user session and remember me cookie', async ({ assert }) => {
2525
const ctx = new HttpContextFactory().create()
2626
const emitter = createEmitter<SessionGuardEvents<SessionFakeUser>>()
27+
const events = emitter.fake()
2728
const userProvider = new SessionFakeUserProvider()
2829

2930
const guard = new SessionGuard(
@@ -54,11 +55,15 @@ test.group('Session guard | logout', () => {
5455
const responseCookies = parseCookies(ctx.response.getHeader('set-cookie') as string)
5556
assert.deepEqual(responseCookies.remember_web.expires, new Date(0))
5657
assert.deepEqual(responseCookies.remember_web.maxAge, -1)
58+
59+
events.assertEmittedCount('session_auth:logged_out', 1)
60+
assert.equal(events.find('session_auth:logged_out')!.data.user, user!.getOriginal())
5761
})
5862

5963
test('delete remember me token using user provider', async ({ assert }) => {
6064
const ctx = new HttpContextFactory().create()
6165
const emitter = createEmitter<SessionGuardEvents<SessionFakeUser>>()
66+
const events = emitter.fake()
6267
const userProvider = new SessionFakeUserWithTokensProvider()
6368

6469
const guard = new SessionGuard(
@@ -99,13 +104,17 @@ test.group('Session guard | logout', () => {
99104
assert.deepEqual(responseCookies.remember_web.maxAge, -1)
100105

101106
assert.lengthOf(userProvider.tokens, 0)
107+
108+
events.assertEmittedCount('session_auth:logged_out', 1)
109+
assert.equal(events.find('session_auth:logged_out')!.data.user, user!.getOriginal())
102110
})
103111

104112
test('do not delete token with storage when no user was authenticated in first place', async ({
105113
assert,
106114
}) => {
107115
const ctx = new HttpContextFactory().create()
108116
const emitter = createEmitter<SessionGuardEvents<SessionFakeUser>>()
117+
const events = emitter.fake()
109118
const userProvider = new SessionFakeUserWithTokensProvider()
110119

111120
const guard = new SessionGuard(
@@ -145,5 +154,8 @@ test.group('Session guard | logout', () => {
145154
assert.deepEqual(responseCookies.remember_web.maxAge, -1)
146155

147156
assert.lengthOf(userProvider.tokens, 1)
157+
158+
events.assertEmittedCount('session_auth:logged_out', 1)
159+
assert.isNull(events.find('session_auth:logged_out')!.data.user)
148160
})
149161
})

0 commit comments

Comments
 (0)