@@ -272,3 +272,75 @@ export const loader = (args: LoaderFunctionArgs) =>
272272 { debug: true },
273273 );
274274```
275+
276+ ## Customizing Session Storage
277+
278+ By default, AuthKit for Remix uses cookie-based session storage with these settings:
279+
280+ ``` typescript
281+ {
282+ name : " wos-session" , // Default or WORKOS_COOKIE_NAME if set
283+ path : " /" ,
284+ httpOnly : true ,
285+ secure : true , // When redirect URI uses HTTPS
286+ sameSite : " lax" ,
287+ maxAge : 34560000 , // 400 days (configurable via WORKOS_COOKIE_MAX_AGE)
288+ secrets : [/* your cookie password, configurable via WORKOS_COOKIE_PASSWORD */ ],
289+ }
290+ ```
291+
292+ ### Custom Session Storage
293+
294+ You can provide your own session storage implementation to both ` authkitLoader ` and ` authLoader ` :
295+
296+ ``` typescript
297+ import { createMemorySessionStorage } from " @remix-run/node" ;
298+ import { authkitLoader , authLoader } from " @workos-inc/authkit-remix" ;
299+
300+ // Create memory-based session storage
301+ const memoryStorage = createMemorySessionStorage ({
302+ cookie: {
303+ name: " auth-session" ,
304+ secrets: [" test-secret" ],
305+ sameSite: " lax" ,
306+ path: " /" ,
307+ httpOnly: true ,
308+ secure: false , // Use false for testing
309+ maxAge: 60 * 60 * 24 // 1 day
310+ }
311+ });
312+
313+ // In your root loader
314+ export const loader = (args ) => authkitLoader (args , {
315+ storage: memoryStorage ,
316+ cookie: { name: " auth-session" }
317+ });
318+
319+ // In your callback route
320+ export const loader = authLoader ({
321+ storage: memoryStorage ,
322+ cookie: { name: " auth-session" }
323+ });
324+ ```
325+
326+ For code reuse and consistency, consider using a shared function:
327+
328+ ``` typescript
329+ // app/lib/session.ts
330+ export function getAuthStorage() {
331+ const storage = createCookieSessionStorage ({/* config */ });
332+ return { storage , cookie: { name: " my-custom-session" } };
333+ }
334+
335+ // Then in your routes
336+ import { getAuthStorage } from " ~/lib/session" ;
337+ export const loader = (args ) => authkitLoader (args , {
338+ ... getAuthStorage (),
339+ // Other options...
340+ });
341+ ```
342+
343+ > [ !NOTE]
344+ > When deploying to serverless environments like AWS Lambda, ensure you pass the same storage configuration to both your main routes and the callback route to handle cold starts properly.
345+
346+ AuthKit works with any session storage that implements Remix's ` SessionStorage ` interface, including Redis-based or database-backed implementations.
0 commit comments