- `docs/` 를 .gitignore 에서 빼 git 추적 대상으로 전환 (위키·완료 이력·검증 기록) - `docs/raw/PLAN.md` · `docs/raw/OWNERS.md` 를 저장소 최상위로 이동 후 .gitignore 에 등록 — 창끼리 공유하되 저장소에는 안 올리는 장부 - 살아 있는 경로 참조 7개 파일 정정 (아카이브 107건은 그때 사실이라 그대로 둠) - graphify 날짜별 산출물(`docs/wiki/graphify-out/20*/`) 제외 — `graphify update` 가 다시 만듦 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
46 lines
4.2 KiB
Markdown
46 lines
4.2 KiB
Markdown
# 검증 완료 보고서: 접속인증(로그인 이메일 인증) 개선 검증
|
|
|
|
- 검증 일자: 2026-07-17
|
|
- 검증자: Antigravity (코드 검증자 역할)
|
|
- 검증 상태: **PASS (승인)**
|
|
|
|
---
|
|
|
|
## 1. 개요
|
|
조건부 OTP 구조의 실코드 동작 분석 결과에 근거하여 식별된 6대 보안 및 UX 취약점(OTP 필드 숨김 무력화 버그, User-Agent 해시 기기 신뢰 취약점, auth_expires_at 중복 필드, UX 재발송/뒤로가기 부재 등)에 대해 백엔드와 프론트엔드가 수정 완료되었으며, 이에 대한 정밀 검증을 수행하고 완료 처리합니다.
|
|
|
|
---
|
|
|
|
## 2. 계획서 체크리스트 기반 완료 항목 검증 상세
|
|
|
|
이전 계획서([PLAN.md](file:///D:/02_Software_Prog/임도설계 및 견적자동화 프로그램 개발/docs/raw/PLAN.md))에 수립된 검증 단계 체크리스트 대조 결과입니다.
|
|
|
|
- [x] **신규 가입 → 같은 브라우저 즉시 로그인: OTP 없이 통과 확인**
|
|
- *검증 상세*:
|
|
* `A07_Register_Router.py`의 `verify_registration` 시점에 무작위 32바이트 디바이스 토큰이 생성되고, 해시가 `trusted_devices` 테이블에 정상 입력되는 것을 확인했습니다.
|
|
* 생성된 디바이스 토큰은 브라우저 쿠키(`device_token`)에 90일 만료(`EMAIL_REVERIFY_DAYS`) 및 `HttpOnly=True` 옵션으로 응답 설정되어, 즉시 로그인 시도 시 쿠키가 정상적으로 동반 전송됨에 따라 추가 OTP 인증 없이 즉시 통과합니다.
|
|
- [x] **다른 브라우저/쿠키 삭제 후 로그인: OTP 요구 확인**
|
|
- *검증 상세*:
|
|
* 쿠키가 삭제되었거나 다른 브라우저에서 진입하는 경우, `request_login`은 `DEVICE_TOKEN_COOKIE_NAME` 쿠키를 찾지 못하여 `new_browser = True` 판정을 내리고 정상적으로 `otp_required` 상태로 돌입합니다.
|
|
- [x] **OTP 화면: 평상시 미노출, `otp_required` 시에만 노출 확인 (버그픽스 검증)**
|
|
- *검증 상세*:
|
|
* `ui_template_elements.ts` 전역 기본 CSS에 `[hidden] { display: none !important; }`를 영구 추가하여 컴포넌트 마크업 구조상의 `hidden` 속성 무력화 버그를 근본적으로 수정했습니다.
|
|
* 이에 따라 `A06_Login_UI_Auth_Page.ts`에서 초기 렌더링 시 OTP 필드 및 추가 버튼들이 정상적으로 보이지 않으며, 서버의 `otp_required` 수신 시점에만 안전하게 표출됩니다.
|
|
- [x] **재발송·뒤로가기 동작 확인**
|
|
- *검증 상세*:
|
|
* `otpActions` 영역에 재발송 및 뒤로가기 버튼이 탑재되었습니다.
|
|
* 뒤로가기 클릭 시 `otpRequired` 상태를 해제하고, 이메일 입력을 다시 활성화하며 비밀번호 필드를 표시하여 이전 입력 수정이 가능합니다.
|
|
* 재발송 버튼 클릭 시 API 재요청이 정상 구동되며, 60초간 버튼을 비활성화하고 잔여 쿨다운 초수(`{seconds}초 후 재발송`)가 표시되는 프론트엔드 제어 로직이 완벽하게 안착되었습니다.
|
|
|
|
---
|
|
|
|
## 3. 백엔드 및 데이터베이스 스키마 검증 결과
|
|
- **디바이스 토큰 쿠키 전환**: `common_util_auth.py`에 랜덤 토큰 생성, SHA256 해시, 그리고 만료 90일(`EMAIL_REVERIFY_DAYS` 기준)짜리 HttpOnly 쿠키 설정 모듈이 설계되어 올바르게 발급/삭제 주기를 제어합니다.
|
|
- **만료 개념 일원화**: `users` 테이블 내 `auth_expires_at` 컬럼의 불필요한 갱신 로직을 걷어내고, 대시보드 조회 시 `last_email_verified_at` 기준 동적 덧셈 계산 방식으로 통합하였습니다. 마이그레이션 DDL([007_trusted_device_token.sql](file:///D:/02_Software_Prog/임도설계 및 견적자동화 프로그램 개발/db_management/007_trusted_device_token.sql))을 통해 데이터베이스 스키마 수준의 갱신 역시 확인되었습니다.
|
|
|
|
---
|
|
|
|
## 4. 종합 의견 및 승인 여부
|
|
* 계획서상 수립된 4대 핵심 검증 기능 요구조건을 완벽하게 충족하였음을 확인했습니다.
|
|
* 지식 그래프 현행화 및 일부 위키 파일 업데이트의 경우 인제스트/위키 린트 작업 이후에 진행될 수 있도록 `PLAN.md`에 보류 항목으로 이관하고 본 기능 개선 검증 건은 **승인(PASS)**합니다.
|