## 📌 개요 세션 기반 로그인/로그아웃 인증 구현. 로그인 성공 시 서버가 세션을 생성하고 쿠키를 발급한다. 세션 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` - [ ] `sessionid`에 `HttpOnly`, `csrftoken`에 `HttpOnly` 미적용 확인 ## 📎 참고 <!-- API 명세, 디자인 시안, 논문/레퍼런스 링크 등 -->
📌 개요
세션 기반 로그인/로그아웃 인증 구현. 로그인 성공 시 서버가 세션을 생성하고 쿠키를 발급한다.
세션 ID를 httpOnly 쿠키로 내려주어 이후 요청의 인증을 유지한다.
🎯 배경 / 목적
사용자 식별과 인증이 모든 기능의 전제 조건이다.
✅ 작업 내용
인증
POST /auth/login) — 세션 생성 +sessionid쿠키 발급Set-Cookie: sessionid={sessionId}; HttpOnly; SameSite=LaxGET /auth/session) — 현재 로그인 상태 반환401 NOT_AUTHENTICATEDGET /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로 수렴401403sessionid에HttpOnly,csrftoken에HttpOnly미적용 확인📎 참고