PASSPORT LOCAL

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

컨트롤러가 비밀번호를 직접 비교하지 않고, Passport가 검증 흐름을 실행한 뒤 성공한 사용자만 요청 객체에 붙입니다.
핵심 연결 @UseGuards(AuthGuard('local')) Guard가 LocalStrategy.validate()를 호출하고, 반환된 user를 req.user로 주입합니다.
Client 로그인 폼
01 POST /auth/login username, password 전송
AuthGuard Passport 실행기
02 local strategy 선택 요청 body를 username/password 필드로 읽음
LocalStrategy 검증 함수
03 validate() UsersService에 사용자 조회와 비밀번호 검사를 위임
UsersService 계정 저장소
04 safe user 반환 password hash 같은 민감 필드는 제거
Controller 응답 생성
05 req.user 사용 AuthService.login(req.user)에서 세션이나 JWT로 확장
성공 경로 validate가 user를 반환하면 Guard가 req.user를 채우고 다음 핸들러를 호출합니다.
실패 경로 사용자 없음, 비밀번호 불일치, 계정 잠금은 UnauthorizedException으로 흐름을 끊습니다.
확장 경로 같은 컨트롤러 위에 JWT 발급, refresh token 저장, audit log를 커밋 이후로 붙일 수 있습니다.
기억할 경계 Strategy는 “누구인지 확인”하고, Guard는 “요청을 통과시킬지” 결정하고, Controller는 이미 검증된 req.user로 응답만 만듭니다.