Skip to content

[Feat] 세션로그인 구현 #1

Description

@ethan0587

📌 개요

세션 기반 로그인/로그아웃 인증 구현. 로그인 성공 시 서버가 세션을 생성하고 쿠키를 발급한다.
세션 ID를 httpOnly 쿠키로 내려주어 이후 요청의 인증을 유지한다.

🎯 배경 / 목적

  • 카페인 다이어리는 개인별 섭취 기록·컨디션·개인화 파라미터를 저장하므로,
    사용자 식별과 인증이 모든 기능의 전제 조건이다.

✅ 작업 내용

인증

  • 로그인 (POST /auth/login) — 세션 생성 + sessionid 쿠키 발급
    • Set-Cookie: sessionid={sessionId}; HttpOnly; SameSite=Lax
  • 로그아웃 — 세션 파기 + 쿠키 만료
  • 세션 확인 (GET /auth/session) — 현재 로그인 상태 반환
  • 인증 가드 — 세션 없음·만료 시 401 NOT_AUTHENTICATED
  • 공개 엔드포인트 3건 예외 처리: GET /auth/session, POST /auth/login,
    POST /auth/signup (나머지 16건은 세션 필수)

CSRF (Django CsrfViewMiddleware 기본 활성)

  • GET /auth/session 뷰에 @ensure_csrf_cookie 적용
    • Set-Cookie: csrftoken={csrfToken}; SameSite=Lax (HttpOnly 미적용)
  • 상태 변경 요청 헤더 X-CSRFToken 검증 (로그인·회원가입 포함)

공통

  • 로그인 실패 시 이메일/비밀번호 오류 미구분 (계정 열거 방지)

🔍 완료 조건

  • 올바른 자격증명 로그인 시 200 + sessionid 쿠키 발급, 이후 보호 라우트 접근 가능
  • 잘못된 자격증명 시 401 + 통일 메시지, 존재하지 않는/탈퇴 계정도 동일하게 401로 수렴
  • 로그아웃 후 동일 쿠키로 보호 라우트 접근 시 401
  • CSRF 토큰 없이/틀린 토큰으로 상태 변경 요청 시 403
  • sessionidHttpOnly, csrftokenHttpOnly 미적용 확인

📎 참고

Metadata

Metadata

Assignees

Labels

feature새로운 기능 추가

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions