rails g authentication은 이메일/비밀번호 기반 로그인, 로그아웃, 비밀번호 재설정 기능을 제공하며, 사용자 등록은 별도 구현합니다. 이 제너레이터는 Rails의 최신 인증 관련 기능을 활용하여 안전한 구현 모범 사례를 제시합니다.
1. 주요 구성 및 보안 기능
-
세션 관리:
Session모델로 로그인 세션 정보(IP, User Agent)를 Active Record로 관리하여 비정상 로그인 감지 및 계정 탈취 시 세션 일괄 무효화를 지원합니다. -
글로벌 컨텍스트:
ActiveSupport::CurrentAttributes기반Current객체로 요청 내current_user정보에 편리하게 접근합니다. -
Rate Limiting: 로그인 및 비밀번호 재설정 시도에 Rate Limiting을 적용하여 무차별 대입 공격 및 이메일 스팸을 방지합니다.
2. has_secure_password 핵심 보안
User 모델의 has_secure_password는 Rails 인증의 중심입니다.
-
안전한 비밀번호 해싱: BCrypt 사용, 의도적인 지연 처리로 무차별 대입 공격을 방어합니다.
-
타이밍 공격 방지:
authenticate_by메서드로 타이밍 공격을 방지, 이메일 존재 여부 유출을 차단합니다. -
비밀번호 재설정 토큰: 유효기간 있는 토큰 생성 및 비밀번호 변경 시 즉시 무효화로 보안을 강화합니다.
3. 기타 특징
-
이메일 정규화:
normalizes :email로 이메일 주소의 일관성을 유지합니다. -
Action Cable 호환: 쿠키에 세션 ID 저장으로 Action Cable에서도 인증 상태를 활용합니다.
-
비밀번호 재설정 흐름: 이메일 링크로 토큰 검증 후 새 비밀번호 설정, 성공 시 기존 모든 활성 세션을 무효화합니다.