자격 증명 수신
username/email과 password를 DTO로 받고 빈 값과 형식을 먼저 거른다.
전략에 도달하기 전 요청 모양을 안정화한다Passport를 붙였다고 인증이 끝나는 것은 아니다. LocalStrategy의 validate에서 사용자 없음, 비밀번호 불일치, 비활성 계정, 세션 저장 여부를 분기하고, Guard가 실패를 어떤 응답으로 바꿀지 정해야 실제 로그인 흐름이 안정된다.
username/email과 password를 DTO로 받고 빈 값과 형식을 먼저 거른다.
전략에 도달하기 전 요청 모양을 안정화한다LocalStrategy.validate에서 계정을 찾고 삭제, 잠금, 미인증 상태를 나눈다.
없는 사용자와 잠긴 사용자는 같은 메시지로 숨길 수 있다저장된 해시와 입력값을 timing-safe한 방식으로 비교한다.
평문 비교나 hash 재사용 실수를 막는다성공하면 request.user를 채우고 실패하면 Unauthorized 흐름으로 응답을 정리한다.
validate가 null을 반환하는지 예외를 던지는지 정책을 맞춘다세션이면 serializeUser, JWT면 토큰 발급과 만료 정책으로 이어간다.
둘을 섞으면 로그아웃과 재인증 흐름이 꼬인다