Skip to content

Commit 179f6ae

Browse files
committed
fix: prevent users from being logged out when browser session ends
1 parent 815d4b8 commit 179f6ae

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

src/lib/hooks/sessionHooks.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import type { EventHandler } from "$lib/types/handler.js";
22

33
export async function sessionHooks({ event }: { event: EventHandler }) {
4+
const TWENTY_NINE_DAYS = 29 * 24 * 60 * 60; // 29 days in seconds
5+
46
event.request.setSessionItem = async (
57
itemKey: string,
68
itemValue: unknown,
@@ -16,6 +18,7 @@ export async function sessionHooks({ event }: { event: EventHandler }) {
1618
secure: process.env.NODE_ENV === "production",
1719
sameSite: "lax",
1820
httpOnly: true,
21+
maxAge: TWENTY_NINE_DAYS,
1922
},
2023
);
2124
};

src/tests/hooks.spec.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,4 +154,35 @@ describe("sessionHooks", () => {
154154
expect(retrievedValue1).toBeUndefined();
155155
expect(retrievedValue2).toBeUndefined();
156156
});
157+
158+
it("should set cookies with 29-day expiry", async () => {
159+
// Arrange
160+
const TWENTY_NINE_DAYS = 29 * 24 * 60 * 60; // 29 days in seconds
161+
const event = {
162+
request: {},
163+
cookies: {
164+
set: vi.fn(),
165+
get: vi.fn(),
166+
},
167+
};
168+
169+
await sessionHooks({ event });
170+
171+
// Act
172+
await event.request.setSessionItem("testKey", "testValue");
173+
174+
// Assert
175+
expect(event.cookies.set).toHaveBeenCalledWith(
176+
"kinde_testKey",
177+
"testValue",
178+
expect.objectContaining({
179+
maxAge: TWENTY_NINE_DAYS,
180+
domain: process.env.KINDE_COOKIE_DOMAIN,
181+
path: "/",
182+
secure: process.env.NODE_ENV === "production",
183+
sameSite: "lax",
184+
httpOnly: true,
185+
}),
186+
);
187+
});
157188
});

0 commit comments

Comments
 (0)