μ΄μ μ¬ν
νμ κ°μ νμ λ‘κ·ΈμΈ νμ΄μ§λ‘ μ΄λνλλ‘ νλλ° λ‘κ·ΈμΈ νμ΄μ§ μ΄λ λ²νΌμ ν΄λ¦ν΄λ νμ΄μ§ μ μμ΄ λμ§ μλ λ¬Έμ κ° λ°μνλ€. λ‘κ·ΈμΈ ν μ¬λμ νμκ°μ κ³Ό λ‘κ·ΈμΈ νμ΄μ§ μ μμ λ§μλλλ° μ΄ λΆλΆμμ λκ° μλͺ»λ κ² κ°μλ€.
μ΄μ λ°μ μ½λ
import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";
import { updateSession } from "./utils/supabase/middleware";
import { createClient } from "./utils/supabase/server";
export async function middleware(request: NextRequest) {
await updateSession(request);
const serverClient = createClient();
const {
data: { user }
} = await serverClient.auth.getUser();
const isLogin = !!user;
if (isLogin && (request.nextUrl.pathname.startsWith("/login") || request.nextUrl.pathname.startsWith("/signUp"))) {
return NextResponse.redirect(new URL("/", request.url));
}
if (!isLogin && request.nextUrl.pathname.startsWith("/myPage")) {
return NextResponse.redirect(new URL("/", request.url));
}
return NextResponse.next();
}
/** μ΄λ€ νμ΄μ§μμ μ΄ λ―Έλ€μ¨μ΄λ₯Ό μ€νν κ±°λ */
export const config = {
matcher: ["/((?!_next/static|_next/image|favicon.ico|.*\\.(?:svg|png|jpg|jpeg|gif|webp)$).*)"]
};
await serverClient.auth.getUser() λ₯Ό ν΅ν΄ μ¬μ©μ μ 보λ₯Ό μ‘°ννκ³ λ‘κ·ΈμΈ λμ΄μμΌλ©΄, λ‘κ·ΈμΈ νμ΄μ§ μ μ μ νμΌλ‘ μ΄λνλλ‘ νλ€.
μμΈ
μνλ² μ΄μ€μμλ νμκ°μ μ νλ©΄ μλμΌλ‘ μΈμ μ΄ λ°λ‘ μ μ₯λλλ‘ λμ΄μλ€κ³ νλ€.
νμκ°μ ν λ°λ‘ μΈμ λ 리기
export async function signup(formData: User) {
const supabase = createClient();
const { data, error } = await supabase.auth.signUp({
email: formData.email,
password: formData.password,
options: {
data: {
user_name: formData.name,
nickname: formData.nickname
}
}
});
if (error) {
return { error: error.message };
}
// νμκ°μ
ν μΈμ
μ μ’
λ£νμ¬ μλ μΈμ
μ μ₯ λ°©μ§
await supabase.auth.signOut();
return { data };
}
signOut() λ©μλλ₯Ό μμ²νμ¬ μΈμ μ μμ μ£Όλλ‘ νμλ€.