Skip to content

Commit 9ed75c7

Browse files
committed
fix: don't chain on res.end on non-chainable res methods (#1031)
1 parent 8e87137 commit 9ed75c7

File tree

5 files changed

+28
-15
lines changed

5 files changed

+28
-15
lines changed

src/server/index.js

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ async function NextAuthHandler (req, res, userSuppliedOptions) {
4343
const error = 'Cannot find [...nextauth].js in pages/api/auth. Make sure the filename is written correctly.'
4444

4545
logger.error('MISSING_NEXTAUTH_API_ROUTE_ERROR', error)
46-
return res.status(500).end(`Error: ${error}`).end()
46+
res.status(500)
47+
return res.end(`Error: ${error}`)
4748
}
4849

4950
const { url, query, body } = req
@@ -232,7 +233,8 @@ async function NextAuthHandler (req, res, userSuppliedOptions) {
232233
session(req, res)
233234
break
234235
case 'csrf':
235-
return res.json({ csrfToken }).end()
236+
res.json({ csrfToken })
237+
return res.end()
236238
case 'signin':
237239
if (options.pages.signIn) {
238240
let redirectUrl = `${options.pages.signIn}${options.pages.signIn.includes('?') ? '&' : '?'}callbackUrl=${callbackUrl}`
@@ -253,7 +255,8 @@ async function NextAuthHandler (req, res, userSuppliedOptions) {
253255
if (provider && options.providers[provider]) {
254256
callback(req, res)
255257
} else {
256-
return res.status(400).end(`Error: HTTP GET is not supported for ${url}`).end()
258+
res.status(400)
259+
return res.end(`Error: HTTP GET is not supported for ${url}`)
257260
}
258261
break
259262
case 'verify-request':
@@ -267,7 +270,8 @@ async function NextAuthHandler (req, res, userSuppliedOptions) {
267270
renderPage(req, res, 'error', { error })
268271
break
269272
default:
270-
return res.status(404).end()
273+
res.status(404)
274+
return res.end()
271275
}
272276
} else if (req.method === 'POST') {
273277
switch (action) {
@@ -298,14 +302,17 @@ async function NextAuthHandler (req, res, userSuppliedOptions) {
298302

299303
callback(req, res)
300304
} else {
301-
return res.status(400).end(`Error: HTTP POST is not supported for ${url}`).end()
305+
res.status(400)
306+
return res.end(`Error: HTTP POST is not supported for ${url}`)
302307
}
303308
break
304309
default:
305-
return res.status(400).end(`Error: HTTP POST is not supported for ${url}`).end()
310+
res.status(400)
311+
return res.end(`Error: HTTP POST is not supported for ${url}`)
306312
}
307313
} else {
308-
return res.status(400).end(`Error: HTTP ${req.method} is not supported for ${url}`).end()
314+
res.status(400)
315+
return res.end(`Error: HTTP ${req.method} is not supported for ${url}`)
309316
}
310317
})
311318
}

src/server/pages/index.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ export default function renderPage (req, res, page, props = {}) {
2727
return
2828
}
2929

30-
res
31-
.setHeader('Content-Type', 'text/html')
32-
.send(`<!DOCTYPE html><head><style type="text/css">${css()}</style><meta name="viewport" content="width=device-width, initial-scale=1"></head><body><div class="page">${html}</div></body></html>`)
33-
.end()
30+
res.setHeader('Content-Type', 'text/html')
31+
res.send(`<!DOCTYPE html><head><style type="text/css">${css()}</style><meta name="viewport" content="width=device-width, initial-scale=1"></head><body><div class="page">${html}</div></body></html>`)
32+
res.end()
3433
}

src/server/routes/providers.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,7 @@ export default function providers (req, res) {
1818
}
1919
}), {})
2020

21-
return res.setHeader('Content-Type', 'application/json').json(result).end()
21+
res.setHeader('Content-Type', 'application/json')
22+
res.json(result)
23+
return res.end()
2224
}

src/server/routes/session.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ export default async function session (req, res) {
1313
const sessionToken = req.cookies[cookies.sessionToken.name]
1414

1515
if (!sessionToken) {
16-
return res.setHeader('Content-Type', 'application/json').json({}).end()
16+
res.setHeader('Content-Type', 'application/json')
17+
res.json({})
18+
return res.end()
1719
}
1820

1921
let response = {}
@@ -99,5 +101,7 @@ export default async function session (req, res) {
99101
}
100102
}
101103

102-
return res.setHeader('Content-Type', 'application/json').json(response).end()
104+
res.setHeader('Content-Type', 'application/json')
105+
res.json(response)
106+
return res.end()
103107
}

src/server/routes/signin.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ export default async function signin (req, res) {
1717
const { type } = provider
1818

1919
if (!type) {
20-
return res.status(500).end(`Error: Type not specified for ${provider}`)
20+
res.status(500)
21+
return res.end(`Error: Type not specified for ${provider}`)
2122
}
2223

2324
if (type === 'oauth' && req.method === 'POST') {

0 commit comments

Comments
 (0)