Local Auth

로그인 요청은 Guard, Strategy, Service를 지나 req.user가 된다

컨트롤러는 비밀번호를 비교하지 않는다. Passport가 검증을 실행하고, 성공한 사용자만 요청 객체에 붙인다.

01 Client POST /auth/login username과 password를 보낸다.
02 Guard AuthGuard('local') local strategy를 선택하고 요청 필드를 넘긴다.
03 Strategy validate() 사용자 조회와 비밀번호 검사를 서비스에 맡긴다.
04 Service safe user 반환 password hash 같은 민감 필드는 제거한다.
05 Controller req.user 사용 세션 또는 JWT 발급으로 확장한다.
성공 validate가 user를 반환하면 Guard가 다음 핸들러를 호출한다.
실패 사용자 없음, 비밀번호 불일치, 계정 잠금은 401로 끊는다.
확장 토큰 저장, audit log, refresh 정책은 인증 성공 이후 붙인다.

기억할 경계: Strategy는 누구인지 확인하고, Guard는 통과 여부를 결정한다.