entonces quiero desproteger la página de inicio de sesión y aquí está mi estructura de carpetas:
aquí está mi middleware:
import { NextResponse, NextRequest } from "next/server"; export async function middleware(req, ev) { if (req.pathname === "login") { return NextResponse.next(); } const token = req.cookies.token; if (!token) { return NextResponse.redirect("/login"); } return NextResponse.next(); }Entonces, ¿cómo hago para que el middleware no se aplique a login.js?
Editar : ahora devuelve [webpack.cache.PackFileCacheStrategy] Caching failed for pack: Error: Unable to snapshot resolve dependencies
el código para este proyecto está aquí
así que resolví el error. No estaba obteniendo el nombre de ruta de req.nextUrl y aquí está el código correcto:
import { NextResponse, NextRequest } from "next/server"; export async function middleware(req, ev) { const { pathname } = req.nextUrl; const token = req.cookies.token; if (pathname == "/login" && !token) { return NextResponse.next(); } if (!token) { return NextResponse.redirect("/login"); } return NextResponse.next(); }Puede verificar si la request es para la página de /login en sí misma y salir temprano.
Consulte todas las propiedades en NextRequest que están disponibles.
import { NextResponse, NextRequest } from "next/server"; export async function middleware(req, ev) { if( req.pathname === 'login'){ return NextResponse.next(); } const token = req.cookies.token; if (!token) { return NextResponse.redirect("/login"); } return NextResponse.next(); }La respuesta aceptada me ayudó mucho. Estoy agregando mi solución porque tuve que hacer algunas modificaciones.
Usé el archivo [...nextauth].js con jwt y devoluciones de llamada de session y cuando usé la solución de la respuesta aceptada, estaba obteniendo el ciclo ERR_TOO_MANY_REQUESTS . Mi solución fue agregar algunas URL más:
import { NextResponse } from "next/server"; import { getToken } from 'next-auth/jwt'; export default async function middleware(req, ev) { const { pathname } = req.nextUrl; const token = await getToken({ req, secret: process.env.JWT_SECRET }); if ((pathname == "/api/auth/signin" || pathname == "/favicon.ico" || pathname == "/api/auth/callback/credentials") && !token) { return NextResponse.next(); } if (!token) { return NextResponse.rewrite(new URL('/api/auth/signin', req.url)); } return NextResponse.next(); }