Middleware dan Pengendalian Akses
Lindungi rute dan endpoint API menggunakan Middleware Next.js untuk otorisasi dan pengalihan.
Middleware dan Pengendalian Akses adalah pelajaran Next.js 15 Fullstack Web Apps gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Next.js 15 Fullstack Web Apps, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Next.js 15 Fullstack Web Apps mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
Intercepting Requests with Middleware
Welcome to Lesson 3! In this lesson, we'll explore Next.js Middleware. Think of middleware as a gatekeeper for your application.
It allows you to run code before a request is completed, letting you inspect, modify, or even redirect requests based on certain conditions. This is super useful for access control!
Creating Your First Middleware
To create middleware, you simply add a middleware.ts (or .js) file at the root of your project, or inside the src directory.
This file must export a default function that takes a NextRequest object and returns a NextResponse. Let's create a basic one:
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
export function middleware(request: NextRequest) {
console.log('Middleware is running!');
// Continue to the requested page
return NextResponse.next();
}Basic Redirection for Access Control
A common use case for middleware is to protect routes. For example, you might want to redirect users who aren't logged in away from a dashboard page.
Here, we'll simulate checking for an 'auth_token' cookie. If it's missing, we redirect the user to the homepage.
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
export function middleware(request: NextRequest) {
const isAuthenticated = request.cookies.has('auth_token');
const { pathname } = request.nextUrl;
// If not authenticated and trying to access /dashboard
if (!isAuthenticated && pathname.startsWith('/dashboard')) {
console.log('User not authenticated, redirecting...');
return NextResponse.redirect(new URL('/', request.url));
}
return NextResponse.next();
}Defining Middleware Scope with `matcher`
By default, middleware runs on every request. This isn't always efficient. You can specify which paths your middleware should run on using the config.matcher property.
The matcher is an array of strings that define path patterns. It's more powerful and recommended than conditional logic inside the middleware function for path filtering.
Using `matcher` for Specific Paths
Let's update our middleware to only run on paths that start with /dashboard or /profile. This makes our middleware more performant by not running on unnecessary routes.
/dashboard/:path*matches/dashboardand any sub-paths like/dashboard/settings./profile/:path*matches/profileand its sub-paths.
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
export function middleware(request: NextRequest) {
const isAuthenticated = request.cookies.has('auth_token');
if (!isAuthenticated) {
console.log('Not authenticated, redirecting to home.');
return NextResponse.redirect(new URL('/', request.url));
}
return NextResponse.next();
}
export const config = {
matcher: ['/dashboard/:path*', '/profile/:path*'],
};Reading & Modifying Request Headers
Middleware can also read and modify request headers. This is useful for passing information down to your pages or API routes, or for adding security headers.
The NextRequest object provides methods to interact with headers, cookies, and the URL.
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
export function middleware(request: NextRequest) {
const requestHeaders = new Headers(request.headers);
const userAgent = requestHeaders.get('user-agent');
console.log('User-Agent:', userAgent);
// Add a custom header
requestHeaders.set('x-custom-header', 'Hello from Middleware');
// Return a new response with modified headers
return NextResponse.next({
request: { headers: requestHeaders },
});
}Protecting API Routes with Middleware
Middleware applies to all routes in your application, including API routes (e.g., /api/users). This is a powerful feature for implementing API authentication and authorization.
You can check for API keys, JWTs, or session tokens in the request headers or cookies before allowing access to your API endpoints.
Authorization vs. Authentication
It's important to distinguish between Authentication (AuthN) and Authorization (AuthZ):
- Authentication: Verifies who a user is (e.g., by checking their login credentials).
- Authorization: Determines what an authenticated user is allowed to do (e.g., access admin pages, delete content).
Middleware can enforce both, by checking if a user is logged in (AuthN) and if they have the necessary roles/permissions (AuthZ) before granting access to a route.
Advanced Authorization Example
Let's combine concepts for a more advanced scenario: checking for an 'admin' role. We'll simulate reading a user role from a cookie and redirecting non-admin users from an /admin path.
This shows how middleware acts as a central point for access control logic.
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
export function middleware(request: NextRequest) {
const userRole = request.cookies.get('user_role')?.value;
const { pathname } = request.nextUrl;
// If trying to access /admin routes
if (pathname.startsWith('/admin')) {
// Check if user has 'admin' role
if (userRole !== 'admin') {
console.log('Access denied: User is not an admin, redirecting.');
return NextResponse.redirect(new URL('/unauthorized', request.url));
}
}
return NextResponse.next();
}
export const config = {
matcher: ['/admin/:path*'],
};Middleware Matching Challenge
Consider the following config.matcher. Which of these paths WILL be processed by the middleware?
export const config = {
matcher: ['/dashboard/:path*', '/settings'],
};Recap: Middleware for Control
You've learned how Next.js Middleware acts as a powerful interceptor for incoming requests.
- It's defined in a
middleware.tsfile. - It can redirect users, modify requests/responses, and add headers.
- The
config.matcheris essential for defining which routes your middleware should protect. - It's crucial for implementing both authentication and authorization logic across your application, including API routes.
Middleware gives you fine-grained control over access and behavior!
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Middleware dan Pengendalian Akses” gratis?
Ya — teks lengkap “Middleware dan Pengendalian Akses” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Next.js 15 Fullstack Web Apps, upgrade ke CoddyKit PRO. Kursus Next.js 15 Fullstack Web Apps mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Middleware dan Pengendalian Akses”?
Lindungi rute dan endpoint API menggunakan Middleware Next.js untuk otorisasi dan pengalihan. Kamu berlatih Next.js 15 Fullstack Web Apps dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Next.js 15 Fullstack Web Apps?
Tidak diperlukan pengalaman sebelumnya. Next.js 15 Fullstack Web Apps di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Middleware dan Pengendalian Akses” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Next.js 15 Fullstack Web Apps ini?
Ya. Setiap pelajaran Next.js 15 Fullstack Web Apps menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengintegrasikan NextAuth.js
- Pengelolaan Sesi dan JWT
- Middleware dan Pengendalian Akses
- Kontrol Akses Berbasis Peran (RBAC)