Next.js ํ๋ก์ ํธ์์ Supabase์ App Router๋ฅผ ํจ๊ป ์ฌ์ฉํ ๋ ๋ณดํธ๋ ํ์ด์ง ์ ๊ทผ ์ฒ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํด์ผ ํ๋์ง์ ๋ํด ์ ๋ฆฌํด๋ณด์์ต๋๋ค.
| ๋ฐฉ๋ฒ | ์ฌ์ฉ ์ฌ๋ถ | ์ถ์ฒ๋ |
|---|---|---|
โ
์๋ฒ ์ปดํฌ๋ํธ์์ ๋ฆฌ๋๋ ์
(redirect()) |
โ๏ธ ์ฌ์ฉ ๊ฐ๋ฅ | โ โ โ ๊ฐ๋ ฅ ์ถ์ฒ |
โ ๋ฏธ๋ค์จ์ด(middleware.ts)์์ Supabase ์ธ์ฆ ์ฒ๋ฆฌ |
โ ๏ธ ๊ฐ๋ฅํ๋ ๋ณต์ก | โ ๋น์ถ์ฒ |
Next.js์ ๋ฏธ๋ค์จ์ด(middleware.ts)๋ Supabase ์ธ์ฆ๊ณผ ํจ๊ป ์ฌ์ฉํ ๋ ๋ค์๊ณผ ๊ฐ์ ์ ํ์ด ์กด์ฌํฉ๋๋ค:
cookies() ํจ์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ Supabase ์ธ์
๊ด๋ฆฌ๊ฐ ๋ถ์์ ํฉ๋๋ค.supabase.auth.getUser()๋ ๋ฏธ๋ค์จ์ด ํ๊ฒฝ์์ ์ฌ์ฉ ๋ถ๊ฐํฉ๋๋ค.์๋ฒ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ง์ Supabase ์ธ์ฆ ์ธ์ ์ ํ์ธํ๊ณ , ์์ผ๋ฉด ๋ฐ๋ก ๋ฆฌ๋๋ ์ ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๋๋ค.
// app/mypage/page.tsx
import { createServerClient } from '@/lib/supabase'
import { redirect } from 'next/navigation'
export default async function MyPage() {
const supabase = createServerClient()
const { data: { user } } = await supabase.auth.getUser()
if (!user) {
redirect('/auth/login')
}
return <div>โ
๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ง ๋ณผ ์ ์๋ ๋ง์ดํ์ด์ง์
๋๋ค.</div>
}
โ Supabase ๊ณต์ ๋ฌธ์์์๋ ๊ถ์ฅํ๋ ๊ฐ์ฅ ์์ ํ ๋ฐฉ๋ฒ์ ๋๋ค.
// middleware.ts
import { NextResponse } from 'next/server'
export function middleware(request) {
const isLoggedIn = request.cookies.has('sb-access-token')
if (!isLoggedIn) {
return NextResponse.redirect(new URL('/auth/login', request.url))
}
return NextResponse.next()
}
ํ์ง๋ง ์ ๋ฐฉ๋ฒ์: