Pass Set-Cookie header from session on page load

If a session is refreshed when accessed through /api/auth/session during
a SSR then the Set-Cookie header was lost.  Pass this along to the
client in this case to keep the session alive.
This commit is contained in:
Hornwitser 2025-05-23 21:32:20 +02:00
parent 8329ff060b
commit 7f3029aee8

View file

@ -1,9 +1,34 @@
export const useAccountSession = () => useFetch(
"/api/auth/session",
{
transform: (input) => input === undefined ? false as any as null: input,
getCachedData(key, nuxtApp) {
return nuxtApp.payload.data[key];
},
import { appendResponseHeader } from "h3";
import type { H3Event } from "h3";
const fetchWithCookie = async (url: string, event?: H3Event) => {
if (!event) {
return $fetch(url);
}
);
const cookie = useRequestHeader("cookie");
const res = await $fetch.raw(url, {
headers: cookie ? { cookie } : undefined
});
for (const cookie of res.headers.getSetCookie()) {
appendResponseHeader(event, "set-cookie", cookie);
}
return res._data;
}
export const useAccountSession = () => {
const event = useRequestEvent();
return useAsyncData(
"session",
async () => await fetchWithCookie("/api/auth/session", event),
{
transform: (input) => input === undefined ? false as any as null: input,
getCachedData(key, nuxtApp, context) {
if (context.cause === "refresh:manual")
return undefined
return nuxtApp.payload.data[key];
},
dedupe: "defer",
}
);
}