feat: enhance session management by adding secure cookie handling based on HTTPS detection

This commit is contained in:
Anders Böttcher
2026-05-13 13:27:36 +02:00
parent 9dbbf814b4
commit 37e916594e
2 changed files with 14 additions and 3 deletions
+6 -2
View File
@@ -30,7 +30,7 @@ export function getSecretKey(): Uint8Array {
}
/** Creates and stores a session JWT in an httpOnly cookie. */
export async function createSession(payload: SessionPayload): Promise<void> {
export async function createSession(payload: SessionPayload, secure?: boolean): Promise<void> {
const expiresAt = new Date(Date.now() + SESSION_DURATION_MS)
const token = await new SignJWT({ ...payload })
.setProtectedHeader({ alg: 'HS256' })
@@ -38,10 +38,14 @@ export async function createSession(payload: SessionPayload): Promise<void> {
.setExpirationTime(expiresAt)
.sign(getSecretKey())
// If the caller explicitly passes a value, honour it.
// Otherwise fall back to NODE_ENV (safe default for fully-HTTPS deploys).
const isSecure = secure !== undefined ? secure : process.env.NODE_ENV === 'production'
const cookieStore = await cookies()
cookieStore.set(SESSION_COOKIE, token, {
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
secure: isSecure,
sameSite: 'lax',
expires: expiresAt,
path: '/',