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

Profile & Password

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

내 정보 수정과 비밀번호 변경 화면입니다.

shadcn/ui · Tabsshadcn/ui · Sonner

로그인한 사용자가 자신의 정보를 보고 고치는 화면입니다. /me 페이지에서 큰 아바타와 요약 카드 아래에 프로필 수정과 비밀번호 변경 두 탭으로 제공됩니다.

두 폼은 /me에서 쓰이지만 서로 독립적인 컴포넌트라, 내 서비스의 설정 화면 등 다른 곳에도 그대로 가져다 쓸 수 있습니다.

What users can do

탭할 수 있는 것할 수 없는 것
프로필 수정이름, 이메일, (켠 경우) 닉네임·전화번호·주소·생년월일·성별 수정아이디 변경, 역할 변경
비밀번호 변경현재 비밀번호를 확인한 뒤 새 비밀번호로 변경현재 비밀번호 없이 변경

Profile form

아이디는 변경할 수 없습니다.

tsx
<ProfileForm
  user={user}
  onSubmit={update.mutate}
  pending={update.isPending}
  optionalFields={["nickname", "phone", "address"]}
  addressType="postcode"
/>

Nickname

  • 닉네임을 켜 두면 마이페이지 요약 카드에서 [변경] 한 번으로 바꿀 수 있습니다 (NicknameForm, Nickname 페이지 참고). 이 프로필 폼에서는 중복을 피하려고 닉네임을 따로 보여 주지 않습니다.
  • 폼 컴포넌트 단독으로 쓸 때(optionalFields에 nickname을 넣었을 때)는 이 폼 안에서도 입력하고 바꿀 수 있습니다 (2~12자). 비우고 저장하면 닉네임이 지워지고 이름이 다시 보입니다.
  • 닉네임이 있으면 사용자 메뉴, 아바타의 이니셜, 내 정보 제목에 이름 대신 닉네임이 쓰입니다.
  • 중복 닉네임은 서버가 거절하고, 그 메시지가 폼 아래에 나옵니다.

Address

주소는 가입과 같은 AddressField를 씁니다. 검색 버튼으로 다시 고르면 우편번호와 주소가 함께 바뀌고, 상세 주소만 고칠 수도 있습니다 (Address Field 참고).

  • 처음에는 저장 버튼이 잠겨 있고, 값을 바꿔야 켜집니다. 바꾸지 않은 채 저장하는 일을 막습니다.
  • 아이디는 수정할 수 없습니다(비활성 입력창). 로그인 식별자라 바꾸면 안 됩니다.
  • 저장에 성공하면 화면의 이름·이메일이 바로 갱신되고 내 정보를 저장했습니다. 토스트가 나타납니다.
  • 선택 항목은 가입 폼에서 켠 signup.optionalFields와 같은 목록을 씁니다. 가입에서 받는 항목은 여기서도 고칠 수 있어야 하기 때문입니다.

Change password

tsx
<ChangePasswordForm
  onSubmit={change.mutate}
  pending={change.isPending}
  error={message}
/>
검사메시지
새 비밀번호 8자 미만새 비밀번호는 8자 이상이어야 합니다.
현재와 동일현재 비밀번호와 다른 비밀번호를 입력해 주세요.
새 비밀번호 두 입력이 다름새 비밀번호가 일치하지 않습니다.
현재 비밀번호가 틀림 (서버)서버의 detail 메시지를 그대로 표시
  • 제출하면 입력창이 모두 비워집니다. 비밀번호를 화면에 남기지 않기 위해서입니다.
  • 성공하면 비밀번호를 변경했습니다. 토스트가 나타납니다.

API

PATCH /users/me
// request
{ "name": "김관리자", "email": "master@example.com", "phone": "010-1234-5678" }

// response 200 → 갱신된 User
PATCH /users/me/password
// request
{ "current_password": "••••••••", "new_password": "••••••••" }

// response 204 | 400 { "detail": "현재 비밀번호가 올바르지 않습니다." }
서버는 본인 요청인지(토큰의 사용자)와 수정 가능한 필드만 받는지(role_id 같은 필드를 무시)를 반드시 확인해야 합니다. 일반 사용자가 자신의 역할을 바꾸는 요청을 보낼 수 없어야 합니다.
  • 비밀번호를 바꾼 뒤 다른 기기의 세션을 끊을지는 서버 정책입니다. 보안상 끊는 것을 권장합니다.

Props

ProfileForm

PropType설명
user필수User현재 사용자. 입력창의 초기값이 됩니다.
onSubmit필수(input: UpdateProfileInput) => void저장할 때 호출합니다.
optionalFieldsSignupOptionalField[]함께 수정할 선택 항목.
pendingboolean요청 중 여부.
errorstring | null서버 오류 메시지.

ChangePasswordForm

PropType설명
onSubmit필수(input: { current_password, new_password }) => void검증을 통과하면 호출합니다.
pendingboolean요청 중 여부.
errorstring | null서버 오류 메시지.

Related API

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

GET/api/users/me내 정보PATCH/api/users/me내 정보 수정 (보낸 항목만)PATCH/api/users/me/password비밀번호 변경 (다른 기기의 로그인은 풀리고, 이 기기는 새 리프레시 쿠키를 받음)DELETE/api/users/me탈퇴 (계정을 막고, 보관 기간이 지나면 개인정보 삭제)
Password ResetNickname
© Meerkit. All rights reserved.GitHub