Rename patterns/middleware.md to docs/patterns/middleware.md
This commit is contained in:
parent
9a3b6034a3
commit
2410d72cee
1 changed files with 0 additions and 0 deletions
33
docs/patterns/middleware.md
Normal file
33
docs/patterns/middleware.md
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# Patroon: Middleware (route protection)
|
||||
|
||||
```ts
|
||||
// middleware.ts
|
||||
import { NextResponse } from 'next/server'
|
||||
import type { NextRequest } from 'next/server'
|
||||
import { getIronSession } from 'iron-session'
|
||||
import { SessionData, sessionOptions } from '@/lib/session'
|
||||
|
||||
const protectedRoutes = ['/dashboard', '/products', '/todos', '/settings']
|
||||
const authRoutes = ['/login', '/register']
|
||||
|
||||
export async function middleware(request: NextRequest) {
|
||||
const response = NextResponse.next()
|
||||
const session = await getIronSession<SessionData>(request.cookies, sessionOptions)
|
||||
|
||||
const isProtected = protectedRoutes.some(r => request.nextUrl.pathname.startsWith(r))
|
||||
const isAuthRoute = authRoutes.some(r => request.nextUrl.pathname.startsWith(r))
|
||||
|
||||
if (isProtected && !session.userId) {
|
||||
return NextResponse.redirect(new URL('/login', request.url))
|
||||
}
|
||||
if (isAuthRoute && session.userId) {
|
||||
return NextResponse.redirect(new URL('/dashboard', request.url))
|
||||
}
|
||||
|
||||
return response
|
||||
}
|
||||
|
||||
export const config = {
|
||||
matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)'],
|
||||
}
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue