본문 바로가기

코딩

Authentication System Prompt - Endless-Login

728x90
반응형

Django 한국어 인증 시스템 구축 프롬프트

📁 GitHub Repository

프로젝트 개요

Django 기반의 완전한 한국어 지원 인증 시스템을 구축해주세요. 이 시스템은 사용자 관리, API 키 관리, 세션 관리, 프로필 관리 등 현대적인 웹 애플리케이션에 필요한 모든 인증 기능을 포함해야 합니다.

1. 모델 구조 (models.py)

User 모델 (AbstractUser 확장)

다음 필드를 포함하는 커스텀 User 모델을 생성해주세요:

기본 정보:

  • email: 고유한 이메일 (USERNAME_FIELD로 설정)
  • username: 사용자명 (REQUIRED_FIELDS에 포함)
  • nickname: 닉네임 (선택사항, 최대 30자)
  • bio: 자기소개 (TextField)

연락처 정보:

  • phone: 전화번호 (정규식 검증 포함, +82 형식 지원)
  • birth_date: 생년월일 (선택사항)

프로필:

  • profile_image: 프로필 이미지 (profile/%Y/%m/ 경로에 저장)

계정 상태:

  • is_verified: 이메일 인증 여부
  • is_premium: 프리미엄 사용자 여부

API 관련:

  • api_key: 고유 API 키 (자동 생성, ak_로 시작하는 24자리)
  • api_calls_limit: API 호출 제한 (기본값 1000)
  • api_calls_count: API 호출 횟수
  • api_calls_reset_date: API 카운트 리셋 날짜
  • last_api_call: 마지막 API 호출 시간

시간 정보:

  • created_at: 계정 생성일
  • updated_at: 마지막 수정일

메서드:

  • generate_api_key(): UUID 기반 API 키 생성
  • reset_api_calls(): API 호출 횟수 초기화
  • can_make_api_call(): API 호출 가능 여부 확인
  • increment_api_calls(): API 호출 횟수 증가
  • api_calls_remaining: 남은 API 호출 횟수 (property)
  • full_name: 닉네임 또는 username 반환 (property)

APIUsageLog 모델

API 사용 내역을 추적하는 모델:

  • User와 ForeignKey 관계
  • endpoint, method, status_code, response_time
  • request_size, response_size, ip_address, user_agent
  • error_message, created_at
  • is_success, is_error property 메서드

UserSession 모델

사용자 세션을 관리하는 모델:

  • User와 ForeignKey 관계
  • session_key (고유값), ip_address, user_agent
  • is_active, created_at, last_activity

2. 폼 구조 (forms.py)

UserRegistrationForm

회원가입 폼 (ModelForm):

  • username, email, nickname, phone 필드
  • password, password_confirm 필드 (최소 8자)
  • 한국어 라벨과 placeholder
  • 중복 검사 (username, email)
  • 전화번호 정규화 (+82 형식으로 자동 변환)
  • 비밀번호 일치 검증
  • 생성 시 is_active=False (이메일 인증 필요)

UserLoginForm

로그인 폼:

  • email_or_username: 이메일 또는 사용자명으로 로그인
  • password: 비밀번호
  • remember_me: 로그인 상태 유지 (체크박스)

ProfileUpdateForm

프로필 수정 폼:

  • nickname, bio, phone, birth_date, profile_image
  • 전화번호 자동 정규화
  • 날짜 입력은 HTML5 date picker 사용

AdminProfileUpdateForm

관리자용 프로필 수정 폼:

  • 일반 ProfileUpdateForm의 모든 필드
  • is_verified, is_premium, api_calls_limit 추가
  • email은 readonly

비밀번호 관련 폼들

  • FindUsernameForm: 이메일로 사용자명 찾기
  • PasswordResetRequestForm: 비밀번호 재설정 요청
  • PasswordResetForm: 새 비밀번호 설정
  • APIKeyRegenerateForm: API 키 재생성 확인

UserFilterForm

관리자용 사용자 필터링:

  • search: 사용자명, 이메일, 닉네임 검색
  • is_verified, is_premium, is_active 필터

3. 뷰 구조 (views.py)

인증 관련 뷰

signup_view:

  • JSON API와 HTML 폼 요청 모두 지원
  • 회원가입 후 이메일 인증 링크 발송
  • send_verification_email 헬퍼 함수 사용

login_view:

  • 이메일 또는 사용자명으로 로그인
  • JSON API와 HTML 폼 요청 모두 지원
  • remember_me 옵션 처리 (세션 만료 설정)
  • 로그인 시 UserSession 생성/업데이트
  • 디버깅을 위한 상세한 로깅

logout_view:

  • 현재 세션 비활성화
  • 로그아웃 후 홈으로 리다이렉트

verify_email_view:

  • 이메일 인증 토큰 검증
  • 성공 시 계정 활성화 및 자동 로그인

계정 관리 뷰

find_id_view:

  • 이메일로 사용자명 찾기
  • 결과를 이메일로 발송

reset_password_request_view:

  • 비밀번호 재설정 링크 요청
  • 이메일 존재 여부 확인

reset_password_confirm_view:

  • 토큰 검증 후 새 비밀번호 설정

프로필 관련 뷰

profile_view:

  • 프로필 조회 및 수정
  • API 사용 통계 표시
  • 최근 세션 목록 표시

api_usage_view:

  • API 사용 로그 조회
  • 필터링 (endpoint, status, date)
  • 페이지네이션 (20개씩)
  • 통계 정보 (총 호출, 성공률)

sessions_view:

  • 활성 세션 목록 표시
  • 개별 세션 종료
  • 모든 세션 일괄 종료 (현재 세션 제외)

regenerate_api_key_view:

  • API 키 재생성
  • 확인 절차 필요

관리자 전용 뷰

admin_user_list_view:

  • 사용자 목록 (스태프만 접근)
  • 검색 및 필터링
  • 페이지네이션 (50개씩)

admin_user_detail_view:

  • 사용자 상세 정보
  • 프로필 수정 (AdminProfileUpdateForm 사용)
  • 사용자 통계 표시

헬퍼 함수

  • send_verification_email(): 이메일 인증 링크 발송
  • get_client_ip(): 클라이언트 IP 주소 추출

4. URL 구조 (urls.py)

app_name = 'account'

# 인증 관련
- signup/, register/ → signup_view
- login/, user_login/ → login_view
- logout/, user_logout/ → logout_view

# 비밀번호 관리
- find-id/ → find_id_view
- reset-password/ → reset_password_request_view
- reset-password/<uidb64>/<token>/ → reset_password_confirm_view

# 이메일 인증
- verify-email/<uidb64>/<token>/ → verify_email_view

# 프로필 관리
- profile/ → profile_view
- api-usage/ → api_usage_view
- sessions/ → sessions_view
- regenerate-api-key/, regenerate-token/ → regenerate_api_key_view

# 관리자 기능
- admin/users/ → admin_user_list_view
- admin/users/<int:user_id>/ → admin_user_detail_view

5. 템플릿 구조

기본 템플릿들

  1. signup.html: 회원가입 폼
  2. login.html: 로그인 폼 (remember_me 체크박스 포함)
  3. profile.html: 프로필 페이지
  4. find_id.html: 아이디 찾기
  5. reset_password_request.html: 비밀번호 재설정 요청
  6. reset_password_form.html: 새 비밀번호 설정
  7. verification_success.html: 이메일 인증 성공
  8. invalid_link.html: 유효하지 않은 링크
  9. api_usage.html: API 사용 현황
  10. sessions.html: 세션 관리
  11. admin/user_list.html: 관리자용 사용자 목록
  12. admin/user_detail.html: 관리자용 사용자 상세

이메일 템플릿

  1. email/verify_email.html: 이메일 인증 링크
  2. email/find_id_email.html: 사용자명 찾기 결과
  3. email/password_reset_email.html: 비밀번호 재설정 링크

6. 주요 기능 요구사항

보안 기능

  • CSRF 보호
  • 비밀번호 최소 8자 이상
  • 이메일 인증 후 계정 활성화
  • 세션별 IP 주소 및 User Agent 추적
  • API 키 자동 생성 및 고유성 보장

UX 개선사항

  • 모든 메시지와 라벨 한국어화
  • JSON API와 HTML 폼 요청 모두 지원
  • 적절한 HTTP 상태 코드 반환
  • Django messages framework 활용
  • 폼 필드에 placeholder 제공
  • 전화번호 자동 정규화 (+82 형식)

API 지원

  • 모든 주요 뷰에서 JSON 응답 지원
  • 일관된 응답 형식
  • 적절한 에러 핸들링

관리자 기능

  • 사용자 검색 및 필터링
  • 사용자 상태 관리 (인증, 프리미엄, 활성화)
  • API 사용 제한 설정
  • 사용자별 통계 확인

7. 설정 요구사항

settings.py 설정

AUTH_USER_MODEL = 'account.User'
LOGIN_URL = '/account/login/'
LOGIN_REDIRECT_URL = '/account/profile/'

마이그레이션

  • 커스텀 User 모델 마이그레이션
  • 인덱스 생성 (email, api_key, created_at)

미디어 파일

  • 프로필 이미지 업로드 경로 설정
  • MEDIA_ROOT 및 MEDIA_URL 설정

8. 추가 고려사항

  1. 에러 처리: 모든 뷰에서 적절한 예외 처리
  2. 로깅: 중요한 작업에 대한 로깅 (특히 로그인 과정)
  3. 성능: 데이터베이스 쿼리 최적화
  4. 확장성: 향후 2단계 인증 등 추가 기능 고려
  5. 테스트: 단위 테스트 및 통합 테스트 작성

이 시스템은 기존 Django 프로젝트와 완벽하게 호환되면서도, 현대적인 웹 애플리케이션에 필요한 모든 인증 기능을 제공해야 합니다.

728x90
반응형