#8.5
세션 찾는 것은 동일한 코드로 수행된다.
lib > session.ts
import { getIronSession } from "iron-session";
import { cookies } from "next/headers";
interface SessionContent {
id?:number // 로그인한 사용자에게만 id가 있기 때문에 ?
}
export default async function getSession() {
return getIronSession<SessionContent>(await cookies(), {
cookieName: "delicious-carrot",
password: process.env.COOKIE_PASSWORD!
})
기존, app > create-account > actions.ts 파일 수정
~~import { getIronSession } from "iron-session";
import { cookies } from "next/headers";~~
import { redirect } from "next/navigation";
import getSession from "../../lib/session";
// ...
export async function createAccount(prevState:any, formData: FormData) {
// ...
const session = await getSession();
// ...
}
app > login > actions.ts
"use server";
// ...
import db from "../../lib/db"
const checkEmailExists = async (email:string) => {
const user = await db.user.findUnique({
where: {
email: email
},
select: {
id: true
}
})
return Boolean(user)
}
const formSchema = z.object({
email: z.string().email().toLowerCase()
.refine(checkEmailExists, "이 이메일을 사용하는 계정이 존재하지 않습니다."),
// ...
})
// ...