diff --git a/packages/astro/src/core/endpoint/index.ts b/packages/astro/src/core/endpoint/index.ts index 9c3b57133..0fc387df7 100644 --- a/packages/astro/src/core/endpoint/index.ts +++ b/packages/astro/src/core/endpoint/index.ts @@ -48,12 +48,14 @@ export function createAPIContext({ generator: `Astro v${ASTRO_VERSION}`, props, redirect(path, status) { - return new Response(null, { + const response = new Response(null, { status: status || 302, headers: { Location: path, }, }); + attachCookiesToResponse(response, context.cookies); + return response; }, ResponseWithEncoding, url: new URL(request.url), diff --git a/packages/astro/src/core/render/core.ts b/packages/astro/src/core/render/core.ts index fb10ccc80..498105f8b 100644 --- a/packages/astro/src/core/render/core.ts +++ b/packages/astro/src/core/render/core.ts @@ -24,12 +24,14 @@ export type RenderPage = { export async function renderPage({ mod, renderContext, env, cookies }: RenderPage) { if (routeIsRedirect(renderContext.route)) { - return new Response(null, { + const response = new Response(null, { status: redirectRouteStatus(renderContext.route, renderContext.request.method), headers: { location: redirectRouteGenerate(renderContext.route, renderContext.params), }, }); + attachToResponse(response, cookies); + return response; } // Validate the page component before rendering the page diff --git a/packages/astro/test/fixtures/middleware-dev/src/middleware.js b/packages/astro/test/fixtures/middleware-dev/src/middleware.js index 854c997c1..02f8fb965 100644 --- a/packages/astro/test/fixtures/middleware-dev/src/middleware.js +++ b/packages/astro/test/fixtures/middleware-dev/src/middleware.js @@ -18,14 +18,14 @@ const first = defineMiddleware(async (context, next) => { return new Response(JSON.stringify(object), { headers: response.headers, }); - } else if(context.url.pathname === '/clone') { + } else if (context.url.pathname === '/clone') { const response = await next(); const newResponse = response.clone(); const /** @type {string} */ html = await newResponse.text(); const newhtml = html.replace('
{data?.name}
+{redirect.value}