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로 응답만 만듭니다.