Estoy tratando de implementar middleware simple para rutas de autenticación en Next.js 12.1.6. Se supone que debe verificar los encabezados de autenticación, validar los tokens y proceder en consecuencia.
Mirando algunos ejemplos en línea, parece que debería devolver NextResponse.next()
para continuar (como llamar a next()
en Express) y new Response()
si no queremos que se complete la solicitud. La devolución de una new Response()
funciona bien, pero NextResponse.next()
arroja TypeError: resolver is not a function
// _middleware.ts import { NextFetchEvent, NextRequest, NextResponse } from "next/server" const authMiddleware = async (req: NextRequest, ev: NextFetchEvent) => { if (validated) { return NextResponse.next() } else { return new Response("Unauthorized") } } export default authMiddleware
NextResponse.rewrite()
usando req.page.name
pero usar una URL dinámica no funciona. NextResponse.redirect()
crea un bucle infinito.
Parece que el problema está en mi configuración local, gracias a Mark por resolverlo.
Aquí hay algunos detalles más:
Pila de llamadas
Call Stack Object.apiResolver file:/Users/adk/Projects/myproject/nextjs/node_modules/next/dist/server/api-utils/node.js (185:15) runMicrotasks <anonymous> processTicksAndRejections node:internal/process/task_queues (96:5) async DevServer.runApi file:/Users/adk/Projects/myproject/nextjs/node_modules/next/dist/server/next-server.js (395:9) async Object.fn file:/Users/adk/Projects/myproject/nextjs/node_modules/next/dist/server/base-server.js (496:37) async Router.execute file:/Users/adk/Projects/myproject/nextjs/node_modules/next/dist/server/router.js (226:36) async DevServer.run file:/Users/adk/Projects/myproject/nextjs/node_modules/next/dist/server/base-server.js (606:29) async DevServer.run file:/Users/adk/Projects/myproject/nextjs/node_modules/next/dist/server/dev/next-dev-server.js (450:20) async DevServer.handleRequest file:/Users/adk/Projects/myproject/nextjs/node_modules/next/dist/server/base-server.js (321:20)
Versión de Next.js: 12.1.6, Versión de nodo: 16.15.1
Estructura de archivos
nextjs ├── package.json ├── next.config.js ├── tsconfig.json ├── pages │ ├── _app.tsx │ ├── api │ │ └── auth │ │ ├── _middleware.ts │ │ └── login.tsx │ └── index.tsx
Estoy confundido en cuanto a por qué NextResponse.next()
no funciona para mí, y realmente agradecería ayuda con la implementación de next()
. Gracias.