로그인 요청은 Guard, Strategy, Service를 지나 req.user가 된다
컨트롤러는 비밀번호를 비교하지 않는다. Passport가 검증을 실행하고, 성공한 사용자만 요청 객체에 붙인다.
성공
validate가 user를 반환하면 Guard가 다음 핸들러를 호출한다.
실패
사용자 없음, 비밀번호 불일치, 계정 잠금은 401로 끊는다.
확장
토큰 저장, audit log, refresh 정책은 인증 성공 이후 붙인다.
기억할 경계: Strategy는 누구인지 확인하고, Guard는 통과 여부를 결정한다.