본문 바로가기
FrontEnd/Next.js

[Next.js] NextAuth로 로그인 처리하기(feat. 로그인 페이지 커스텀)

by 위그든씨 2023. 1. 23.
export default NextAuth({
    providers: [
        CredentialsProvider({
            id: "email-password-credential",
            name: "Credentials", //NextAuth에서 만들어주는 Form 태그의 로그인 버튼에 노출될 텍스트
            type: "credentials",

            credentials: {
                email: {
                    label: "email",
                    type: "email",
                },
                password: {
                    label: "password",
                    type: "password",
                },
            },
            async authorize(credentials) {
                if (!credentials)
                    throw new Error("잘못된 입력값으로 인한 오류 발생");

                const { email, password } = credentials;
                const exUser = await client.user.findUnique({
                    where: { email },
                });
                if (!exUser)
                    throw new Error("아이디나 비밀번호가 불일치합니다");

				//저장시 bcrypt를 통해 암호화를 시켜서 비밀번호 비교시 bcrypt 이용해야함
                const match = await bcrypt.compare(password, exUser.password);
                if (!match) throw new Error("아이디나 비밀번호가 불일치합니다");

                console.log(exUser);
                return exUser;
            },
        }),
    ],
    callbacks: {
        async jwt({ token }) {
            return token;
        },
        async session({ session }) {
            const exUser = await client.user.findUnique({
                where: {
                    email: session.user?.email!,
                },
                select: {
                    email: true,
                    name: true,
                },
            });
            session.user = exUser!;
            return session;
        },
    },
    pages: {
        signIn: "/sign-in",
    },
});