From f1c5f7fa312cf0451e4d8989791e366473ead36d Mon Sep 17 00:00:00 2001 From: Sebastian Pietras Date: Wed, 22 Jul 2026 21:35:44 +0200 Subject: [PATCH] Improved parsing user data from headers --- .../common/{% if identity %}identity{% endif %}/schemas.ts | 2 +- .../lib/get-user/utils.ts | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/src/common/{% if identity %}identity{% endif %}/schemas.ts b/src/src/common/{% if identity %}identity{% endif %}/schemas.ts index deb3934..1b89d86 100644 --- a/src/src/common/{% if identity %}identity{% endif %}/schemas.ts +++ b/src/src/common/{% if identity %}identity{% endif %}/schemas.ts @@ -2,6 +2,6 @@ import * as z from "zod"; export const IdentitySchemas = { User: z.object({ - id: z.string(), + id: z.coerce.string().nonempty(), }), }; diff --git a/src/src/server/{% if identity %}identity{% endif %}/lib/get-user/utils.ts b/src/src/server/{% if identity %}identity{% endif %}/lib/get-user/utils.ts index 8f61077..df3fb2f 100644 --- a/src/src/server/{% if identity %}identity{% endif %}/lib/get-user/utils.ts +++ b/src/src/server/{% if identity %}identity{% endif %}/lib/get-user/utils.ts @@ -1,12 +1,10 @@ -import { isJSONArray, isJSONObject } from "es-toolkit/predicate"; import { unflatten } from "flat"; import { IdentitySchemas } from "../../../../common/identity/schemas"; export function parseValue(value: string) { try { - const parsed = JSON.parse(value) as unknown; - return isJSONObject(parsed) || isJSONArray(parsed) ? parsed : value; + return JSON.parse(value) as unknown; } catch { return value; } @@ -19,7 +17,7 @@ export async function parseUserFromHeaders(headers: Headers) { headers .entries() .map(([key, value]) => [key.toLowerCase(), value] as [string, string]) - .filter(([key]) => key === "x-user" || key.startsWith("x-user-")) + .filter(([key, value]) => /^x-user(?:-[^-]+)*$/.exec(key) && value) .map(([key, value]) => [ key.replace(/^x-/, "").replaceAll("-", "."), parseValue(value),