Meerkit
Meerkit
HomeDocsComponentsAPI
GitHub

Getting Started

5
IntroductionInstallationProject StructureThemingDeployment

CLI

6
CLI Overviewinit & setupstart, stop & openstatus, check, env & logsdbadd, test & update

Core Concepts

5
AuthenticationRoles & PermissionsData ModelLogin LockoutSecurity

Guides

3
Protect a pageAdd a roleCall your own API

Components

24

사용자 화면12

Login FormSignup FormEmail VerificationTerms AgreementGoogle LoginPassword ResetProfile & PasswordNicknameAuth DialogProfile ImageUser AvatarUser Menu

관리자 화면6

Member TableMember DirectoryMember AI UsageMember AI Usage HistoryRole ManagerRole Select

공통5

Address FieldFile DropzoneLoadingDateRoute Guards

AI Components

4
AI Prompt InputThinking IndicatorAPI Key InputVoice

API

6
OverviewHealthAuthUsers · 내 정보Users · 관리자LLM

Reference

2
Hooks & StateFAQ

Auth Dialog

사용자용 컴포넌트서비스를 쓰는 일반 사용자가 보는 화면에 쓰입니다.

로그인과 가입을 하나로 묶은 모달입니다.

shadcn/ui · Dialog

로그인과 가입 폼을 하나의 모달로 묶은 컴포넌트입니다. 모달 안에서 두 모드를 오갈 수 있고, 성공하면 자동으로 닫힙니다.

AuthDialog는 MeerkitProvider가 이미 한 번 렌더링합니다. 직접 또 렌더링하지 마세요.

When to use

  • 사용자를 현재 페이지에서 벗어나게 하지 않고 로그인·가입을 받고 싶을 때
  • 보호된 화면의 "로그인이 필요합니다" 안내에서 바로 로그인시키고 싶을 때 (RequireAuth가 이 모달을 엽니다)
  • 헤더, 웰컴 페이지, 버튼 어디서든 openDialog 한 줄로 열고 싶을 때

Preview

tsx
const openDialog = useAuthDialog((s) => s.openDialog);

<Button onClick={() => openDialog("login")}>로그인</Button>
<Button onClick={() => openDialog("signup")}>회원가입</Button>

Store

PropType설명
openboolean모달이 열려 있는지.
mode"login" | "signup" | "forgot"현재 보여 주는 폼. forgot은 비밀번호 찾기.
openDialog(mode) => void모드를 지정해 모달을 엽니다.
closeDialog() => void모달을 닫습니다.
setMode(mode) => void열린 상태에서 모드만 바꿉니다.

Behavior

  • 로그인에 성공하면 액세스 토큰을 저장하고 모달을 닫습니다.
  • 가입에 성공하면 같은 아이디와 비밀번호로 이어서 로그인합니다.
  • 로그인에서 비밀번호를 잊으셨나요?를 누르면 같은 모달 안에서 비밀번호 찾기 폼으로 바뀌고, 메일 발송 후 안내 화면이 나옵니다.
  • 로그인 연속 실패 잠금 상태를 폼에 전달합니다 (Login Lockout 참고).
  • 가입 폼에는 meerkit.config.ts의 비밀번호 확인, 선택 항목, 약관 설정이 그대로 적용됩니다.
  • 서버가 돌려준 detail 메시지를 폼 아래에 표시합니다.

Usage

어디서든 스토어의 openDialog만 호출하면 됩니다. 웰컴 페이지의 버튼도 같은 방식입니다.

tsx
"use client";

import { useAuthDialog } from "@/meerkit/auth/dialog-store";

export function LoginButton() {
  const openDialog = useAuthDialog((s) => s.openDialog);
  return <button onClick={() => openDialog("login")}>로그인</button>;
}

Accessibility

  • Radix Dialog 기반이라 열리면 포커스가 모달 안에 갇히고, Esc로 닫을 수 있습니다.
  • 제목과 설명이 aria-labelledby, aria-describedby로 연결됩니다.
  • 닫으면 포커스가 모달을 연 버튼으로 돌아갑니다.

Customization

  • 문구(제목, 설명, 전환 링크)는 AuthDialog.tsx에 있습니다.
  • 폭과 모서리는 components/ui/dialog.tsx의 DialogContent 클래스를 바꿉니다.
  • 소셜 로그인 같은 버튼은 폼 아래에 추가하면 됩니다.

Related API

이 컴포넌트가 호출하는 API입니다. 누르면 요청·응답 명세로 이동합니다.

POST/api/auth/login로그인 (연속 실패 시 잠금: 429 + Retry-After)POST/api/auth/signup회원가입 (기본 역할 VIEWER, 필수 약관·이메일 인증 필요)POST/api/auth/password/forgot비밀번호 재설정 메일 요청 (가입 여부와 관계없이 항상 같은 응답)POST/api/auth/id/forgot아이디 찾기 메일 요청 (가입 여부와 관계없이 항상 같은 응답)
NicknameProfile Image
© Meerkit. All rights reserved.GitHub