Skip to content

Commit

Permalink
Special case Set-Cookie
Browse files Browse the repository at this point in the history
  • Loading branch information
styfle committed Oct 26, 2021
1 parent 5a08c01 commit d31615b
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 2 deletions.
6 changes: 5 additions & 1 deletion packages/next/server/next-server.ts
Expand Up @@ -1164,7 +1164,11 @@ export default class Server {

for (const [key, value] of result.response.headers.entries()) {
if (key !== 'content-encoding') {
res.setHeader(key, value)
if (key.toLowerCase() === 'set-cookie') {
res.setHeader(key, value.split(', '))
} else {
res.setHeader(key, value)
}
}
}

Expand Down
4 changes: 4 additions & 0 deletions packages/next/server/web/utils.ts
Expand Up @@ -38,6 +38,10 @@ export function toNodeHeaders(headers?: Headers): NodeHeaders {
if (headers) {
for (const [key, value] of headers.entries()) {
result[key] = value
if (key.toLowerCase() === 'set-cookie') {
console.log('the value of the cookie header is' + value)
result[key] = value.split(', ')
}
}
}
return result
Expand Down
Expand Up @@ -20,6 +20,11 @@ export async function middleware(request, ev) {
next.headers.append('x-append-me', 'top')
}

// Ensure deep can append to this value
if (url.searchParams.get('cookie-me') === 'true') {
next.headers.append('set-cookie', 'chocochip')
}

// Sends a header
if (url.pathname === '/responses/header') {
next.headers.set('x-first-header', 'valid')
Expand Down
Expand Up @@ -6,5 +6,8 @@ export async function middleware(request, _event) {
if (request.nextUrl.searchParams.get('append-me') === 'true') {
next.headers.append('x-append-me', 'deep')
}
if (request.nextUrl.searchParams.get('cookie-me') === 'true') {
next.headers.append('set-cookie', 'oatmeal')
}
return next
}
3 changes: 2 additions & 1 deletion test/integration/middleware-core/test/index.test.js
Expand Up @@ -329,11 +329,12 @@ function responseTests(locale = '') {
it(`${locale} should respond with top level headers and override with deep headers`, async () => {
const res = await fetchViaHTTP(
context.appPort,
`${locale}/responses/deep?nested-header=true&append-me=true`
`${locale}/responses/deep?nested-header=true&append-me=true&cookie-me=true`
)
expect(res.headers.get('x-nested-header')).toBe('valid')
expect(res.headers.get('x-deep-header')).toBe('valid')
expect(res.headers.get('x-append-me')).toBe('top, deep')
expect(res.headers.raw()['set-cookie']).toEqual(['chocochip', 'oatmeal'])
})
}

Expand Down

0 comments on commit d31615b

Please sign in to comment.