Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b3ab558

Browse files
authored
fix: ensure internal x-middleware-set-cookie header is not passed on to lambda (#2891)
* fix: ensure internal x-middleware-set-cookie header is not set when setting cookies in middleware * fix: make environment variables for draft mode available at edge
1 parent 5489c0d commit b3ab558

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

‎edge-runtime/lib/middleware.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ export function mergeMiddlewareCookies(middlewareResponse: Response, lambdaReque
6767
const middlewareCookies = middlewareResponse.headers.get('x-middleware-set-cookie')
6868

6969
if (middlewareCookies) {
70+
// Next expects internal headers to be omitted when cookies are set by the middleware
71+
// See: https://github.com/vercel/next.js/blob/005db43079c7b59fd8c2594e8362761dc4cb3211/test/e2e/app-dir/app-middleware/app-middleware.test.ts#L197-L207
72+
middlewareResponse.headers.delete('x-middleware-set-cookie')
73+
7074
// Targets commas that are not followed by whitespace
7175
// See: https://github.com/vercel/next.js/blob/e6145d3a37bb4c7b481fd58e05cdff9046ace8ad/packages/next/src/server/web/spec-extension/response.ts#L58-L66
7276
const regex = new RegExp(/,(?!\s)/)

‎src/build/functions/edge.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ const writeHandlerFile = async (ctx: PluginContext, { matchers, name }: NextDefi
119119

120120
const copyHandlerDependencies = async (
121121
ctx: PluginContext,
122-
{ name, files, wasm }: NextDefinition,
122+
{ name, env,files, wasm }: NextDefinition,
123123
) => {
124124
const srcDir = join(ctx.standaloneDir, ctx.nextDistDir)
125125
const destDir = join(ctx.edgeFunctionsDir, getHandlerName({ name }))
@@ -132,6 +132,11 @@ const copyHandlerDependencies = async (
132132

133133
const outputFile = join(destDir, `server/${name}.js`)
134134

135+
// Prepare environment variables for draft-mode (i.e. __NEXT_PREVIEW_MODE_ID, __NEXT_PREVIEW_MODE_SIGNING_KEY, __NEXT_PREVIEW_MODE_ENCRYPTION_KEY)
136+
for (const [key, value] of Object.entries(env)) {
137+
parts.push(`process.env.${key} = '${value}';`)
138+
}
139+
135140
if (wasm?.length) {
136141
for (const wasmChunk of wasm ?? []) {
137142
const data = await readFile(join(srcDir, wasmChunk.filePath))
@@ -161,16 +166,16 @@ const buildHandlerDefinition = (
161166
ctx: PluginContext,
162167
{ name, matchers, page }: NextDefinition,
163168
): Array<ManifestFunction> => {
164-
const fun = getHandlerName({ name })
165-
const funName = name.endsWith('middleware')
169+
const functionHandlerName = getHandlerName({ name })
170+
const functionName = name.endsWith('middleware')
166171
? 'Next.js Middleware Handler'
167172
: `Next.js Edge Handler: ${page}`
168173
const cache = name.endsWith('middleware') ? undefined : ('manual' as const)
169174
const generator = `${ctx.pluginName}@${ctx.pluginVersion}`
170175

171176
return augmentMatchers(matchers, ctx).map((matcher) => ({
172-
function: fun,
173-
name: funName,
177+
function: functionHandlerName,
178+
name: functionName,
174179
pattern: matcher.regexp,
175180
cache,
176181
generator,
@@ -183,10 +188,7 @@ export const clearStaleEdgeHandlers = async (ctx: PluginContext) => {
183188

184189
export const createEdgeHandlers = async (ctx: PluginContext) => {
185190
const nextManifest = await ctx.getMiddlewareManifest()
186-
const nextDefinitions = [
187-
...Object.values(nextManifest.middleware),
188-
// ...Object.values(nextManifest.functions)
189-
]
191+
const nextDefinitions = [...Object.values(nextManifest.middleware)]
190192
await Promise.all(nextDefinitions.map((def) => createEdgeHandler(ctx, def)))
191193

192194
const netlifyDefinitions = nextDefinitions.flatMap((def) => buildHandlerDefinition(ctx, def))

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /