Membuat pengecualian pada middleware Nexjs 14
Pada contoh berikut merupakan middleware yang sudah dibuat.
import { NextResponse } from "next/server";
import { getSession } from '@/lib/actions';
export async function middleware(req) {
const { pathname } = req.nextUrl;
const session = await getSession(req);
if (!session.isLoggedIn) {
const url = req.nextUrl.clone();
url.pathname = '/admin/login';
return NextResponse.redirect(url);
}
return NextResponse.next();
}
export const config = {
matcher: '/admin/:path*',
};
Agar project tidak mengalami "Many to redirect" kalian hanya perlu menambahkanya seperti ini.
// Jika rute adalah '/admin/login', biarkan saja
if (pathname === '/admin/login') {
return NextResponse.next();
}
Jika sudah digabungkan maka akan menjadi seperti ini.
import { NextResponse } from "next/server";
import { getSession } from '@/lib/actions';
export async function middleware(req) {
const { pathname } = req.nextUrl;
// Jika rute adalah '/admin/login', biarkan saja
if (pathname === '/admin/login') {
return NextResponse.next();
}
const session = await getSession(req);
if (!session.isLoggedIn) {
const url = req.nextUrl.clone();
url.pathname = '/admin/login';
return NextResponse.redirect(url);
}
return NextResponse.next();
}
export const config = {
matcher: '/admin/:path*',
};
perlu kalian ketahui cara ini akan berguna jika kalian menggunakan "redirect" tetapi jika menggantinya dengan rewrite maka kalian tidak perlu membuat pengecualian.