Merhaba;
middleware src dizinine koyman gerekiyor. app/ ile ayni seviyeye.
https://nextjs.org/docs/app/building-your-application/routing/middleware
middleware.ts
import { NextResponse, type NextRequest } from "next/server"
// en basiti ile her request öncesi bu method çalışacak
export function middleware(request: NextRequest) {
return NextResponse.redirect(new URL('/home', request.url))
}
middleware.ts den config objesi export edebilirsin,
matcher: regexp ile middlewarein hangi routlarda çalışacağını belirtiyorsun. array de olabilir.
export const config = {
matcher: "/api/admin*"
}
sveltekit deki gibi sequence middleware'i yok yani dogrudan birden fazla middle war tanimlayamiyoruz. Manuel olarak benzer sonuca ellede ulaşılabilir bence o kadarda sorun değil
auth için hazır kütüphaneler var çokta uğraşmaya gerek yok ama basit bir örnek;
middleware.ts
import { NextResponse, type NextRequest } from "next/server"
export async function middleware(request: NextRequest & { user: any}) {
const session = request.cookies.get("session")
// cookie yoksa autenticate te olmamis demek
if(!session) return NextResponse.json({ message: "unauthorized" }, { status: 401 })
// cookie parse et
const user = await CookieParseEbilenMethod(session)
request.user = user
return NextResponse.next()
}
// UpdateProduct.ts
"use server"
export async function UpdateProductAction(request NextRequest & { user: any }) {
// emin olmamakla birlikte request.user diye user objesine ulaşılabilmesi lazım.
}