로그인・회원가입
이메일과 비밀번호 검증, 전송 중 표시, 로그인 후 화면까지 만듭니다.
이 코드는 파일 2개로 되어 있습니다. 모두 같은 폴더에 넣으면 동작합니다.
LoginTabs.tsx
로그인・회원가입 화면
auth.tsx
로그인한 사용자 정보를 전달한다 (실제로는 NextAuth 등으로 바꾼다)
사용 방법 (Next.js)
내 프로젝트에서 이 화면을 띄우기까지의 3단계입니다
- 1
터미널에서 사용할 컴포넌트와 라이브러리를 설치 (한 번만)
npx shadcn@latest add button input label tabs
npm i react-hook-form zod
npm i @hookform/resolvers
아직 shadcn/ui를 설치하지 않은 프로젝트라면 먼저 npx shadcn@latest init 을 한 번 실행합니다
- 2
파일을 이 위치에 붙여넣기
my-app/ ├─ components/ │ └─ login/ │ ├─ LoginTabs.tsx ← 위의 창에서 복사한 것 │ └─ auth.tsx ← 위의 창에서 복사한 것 └─ app/ └─ login/ └─ page.tsx ← 3단계에서 만든다
폴더가 없으면 만듭니다. 파일은 모두 같은 폴더에 넣습니다.
- 3
페이지 파일에서 불러오기
import LoginTabs from "@/components/login/LoginTabs" export default function Page() { return <LoginTabs /> }app/login/page.tsx 에 씁니다. npm run dev 로 실행하고 /login 로 가면 보입니다
핵심 포인트
- 1
검증 규칙은 한곳에 모으기
Zod로 "이메일 형식", "8자 이상"을 한곳에 쓰고 오류 메시지도 거기서 정합니다. 회원가입은 로그인 규칙에 "이름"만 하나 더한 것입니다.
- 2
전송 중에는 버튼을 누를 수 없게 하기
중복 전송을 막습니다. 버튼 문구도 "로그인 중…"으로 바꿔서 잠시 기다려야 한다는 것을 알립니다.
- 3
로그인한 사용자 정보를 앱 전체에 나눠 주기
Context에 넣어 두면 헤더의 이름과 본문의 "환영합니다" 모두에서 쓸 수 있습니다.
사용한 도구
누르면 제2부의 비교 페이지로