Skip to content

Commit 7f42066

Browse files
committed
clear cookies
1 parent 430d0de commit 7f42066

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

packages/pwa-kit-runtime/src/ssr/server/process-token-response.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,23 @@ export function applyHttpOnlySessionCookies(responseBuffer, proxyRes, req, res,
197197
expires: refreshExpires
198198
})
199199
)
200+
201+
// Delete the opposite refresh token cookie to mirror client-side behavior:
202+
// Login (guest → registered): delete guest cookie cc-nx-g
203+
// Logout (registered → guest): delete registered cookie cc-nx
204+
const staleCookieName = isGuest ? `cc-nx_${site}` : `cc-nx-g_${site}`
205+
res.append(
206+
SET_COOKIE,
207+
cookieAsString({
208+
name: staleCookieName,
209+
value: '',
210+
path: '/',
211+
secure: true,
212+
sameSite: 'lax',
213+
httpOnly: true,
214+
expires: new Date(0)
215+
})
216+
)
200217
}
201218

202219
// Strip token fields from body so they are not exposed to the client

packages/pwa-kit-runtime/src/ssr/server/process-token-response.test.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -204,8 +204,12 @@ describe('applyHttpOnlySessionCookies', () => {
204204
expect(uidoCookie.value).toBe('ecom')
205205
expect(uidoCookie.httpOnly).toBeUndefined()
206206

207-
// Should NOT have registered refresh cookie
208-
expect(res.cookies.find((c) => c.startsWith('cc-nx_testsite='))).toBeUndefined()
207+
// Registered refresh cookie should be expired (deleted)
208+
const staleRegisteredCookie = parseCookie(
209+
res.cookies.find((c) => c.startsWith('cc-nx_testsite='))
210+
)
211+
expect(staleRegisteredCookie.value).toBe('')
212+
expect(staleRegisteredCookie.expires).toEqual(new Date(0))
209213

210214
// Tokens stripped from body, other fields preserved
211215
const body = JSON.parse(result.toString('utf8'))
@@ -249,8 +253,12 @@ describe('applyHttpOnlySessionCookies', () => {
249253
const uidoCookie = parseCookie(res.cookies.find((c) => c.includes('uido_testsite=')))
250254
expect(uidoCookie.value).toBe('ecom')
251255

252-
// Should NOT have guest refresh cookie
253-
expect(res.cookies.find((c) => c.includes('cc-nx-g_testsite='))).toBeUndefined()
256+
// Guest refresh cookie should be expired (deleted)
257+
const staleGuestCookie = parseCookie(
258+
res.cookies.find((c) => c.startsWith('cc-nx-g_testsite='))
259+
)
260+
expect(staleGuestCookie.value).toBe('')
261+
expect(staleGuestCookie.expires).toEqual(new Date(0))
254262

255263
// No dnt cookie when dnt absent from JWT
256264
expect(res.cookies.find((c) => c.includes('cc-at-dnt_testsite'))).toBeUndefined()

0 commit comments

Comments
 (0)