Firebase Authentication 사용 기준: 로그인 유지와 비밀번호 재설정

2026.01.13·수정 2026.09.13·약 6분·작성: 해비·블로그 소개

학습 목표와 사전 지식

목표: 로그인 지속성·초기 인증 관찰·비밀번호 재설정 단계의 차이를 이해합니다.
사전 지식: Firebase 웹 초기화, Promise/async, 이메일 비밀번호 provider

로그인 유지 옵션은 이 브라우저의 인증 상태 저장 정책입니다. 사용자 접근 권한이나 모든 기기의 세션 회수를 대신하지 않습니다. UI는 로그인 함수 호출 직후 추정한 값보다 인증 상태 관찰 결과를 기준으로 갱신하세요.

정책 용도·한계
browserLocalPersistence 브라우저를 닫아도 유지하는 정책; 명시적 로그아웃·저장소 조건 영향
browserSessionPersistence 현재 탭/세션 범위의 정책; 전체 계정 세션 회수 아님
inMemoryPersistence 메모리에만 유지; 새로고침 후 유지하지 않는 경우

src/shared/libs/firebase/auth.ts · 전체 유틸 모듈; 같은 폴더의 firebase.ts는 초기화 글 참조

import { auth } from './firebase';
import {
  browserLocalPersistence, browserSessionPersistence,
  createUserWithEmailAndPassword, setPersistence,
  signInWithEmailAndPassword, signOut, sendPasswordResetEmail,
  verifyPasswordResetCode, confirmPasswordReset
} from 'firebase/auth';

export async function signUp(email: string, password: string) {
  return createUserWithEmailAndPassword(auth, email, password);
}
export async function login(email: string, password: string, keep: boolean) {
  await setPersistence(auth, keep ? browserLocalPersistence : browserSessionPersistence);
  return signInWithEmailAndPassword(auth, email, password);
}
export async function logout() { await signOut(auth); }
export async function requestReset(email: string) {
  await sendPasswordResetEmail(auth, email);
}
export async function verifyReset(code: string) {
  return verifyPasswordResetCode(auth, code);
}
export async function finishReset(code: string, password: string) {
  await confirmPasswordReset(auth, code, password);
}

순서를 지켜야 하는 이유

setPersistence는 비동기이므로 await 후 signInWithEmailAndPassword를 호출합니다. 버튼을 여러 번 누르면 서로 다른 유지 정책 호출이 경쟁할 수 있어 진행 중에는 다시 제출하지 않도록 UI에서 제어합니다. 시작 시 currentUser가 null이라고 바로 로그아웃으로 확정하지 말고 onAuthStateChanged 최초 콜백까지 loading 상태를 둡니다. 구독은 컴포넌트 정리 때 해제합니다.

Firebase Authentication의 sign in persist refresh reset email done 복구 흐름

로그아웃의 범위

signOut은 현재 클라이언트 인증 상태를 정리합니다. 다른 기기까지 전부 로그아웃하거나 이미 발급된 모든 ID token을 즉시 무효화하는 API가 아닙니다. 분실 기기·계정 사고 대응은 Admin SDK의 세션 취소와 서버 검증이 별도로 필요합니다. 로그아웃 실패를 무조건 성공 화면으로 이동시켜 숨기지 말고 재시도 가능한 메시지를 표시합니다.

비밀번호 재설정은 세 단계

requestReset은 메일 발송 요청, verifyReset은 oobCode 유효성 확인, finishReset은 새 비밀번호 확정입니다. 기본 Firebase action handler를 사용하면 링크 처리 UI를 직접 만들 필요가 없습니다. 직접 페이지를 만들 때만 mode와 oobCode를 읽어 해당 단계를 구현하고 만료·이미 사용한 코드·암호 정책 실패를 구분합니다. 요청 성공을 계정 존재 증거로 안내하지 말고 “해당 주소로 안내를 받을 수 있는 경우 메일을 확인하세요”처럼 계정 열거를 줄이는 응답을 씁니다.

Firebase Authentication에서 로그인 유지와 토큰 복원, 비밀번호 재설정이 이어지는 흐름

독자가 확인할 시나리오

개발 계정으로 keep true/false 각각 로그인 후 새로고침·탭 종료·다시 열기를 비교합니다. 로그아웃 후 관찰 user가 null로 바뀌는지 확인합니다. 재설정 메일을 본인 테스트 주소로 보내 새 비밀번호 성공과 이전 비밀번호 실패를 확인하고, 같은 링크를 재사용했을 때 거부되는지 확인합니다. 메일 배달과 실제 인증은 이 글의 정적 검증으로 확인할 수 없습니다.

직접 확인할 결과

유틸 import·호출 순서 정적 확인
실제 로그인 유지/메일 배달 미실행

검증 범위와 기준일

공식 문서 확인일: 2026-09-13. 웹 SDK 예제는 모듈형 API 기준입니다. 이 글의 코드·구조 정적 검토와 실제 클라우드 인증·저장·배포 검증을 구분합니다. 본인 개발 Firebase 프로젝트의 실제 인증·권한·배포 요청은 이 편집 환경에서 실행하지 않았습니다.

이어서 학습하기

공식 문서

이 글이 도움이 되었나요?

조회 중

Firebase 학습 순서

필수 13개 · 전체 19개

읽음 기록 관리

전체 과정 목차 (19개)
  1. 필수 길잡이 · Firebase 실무 로드맵: Auth, Firestore, Storage, Functions
  2. 필수 학습 · Firebase 초기화 구조: Next.js firebase.ts 설계 기준
  3. 필수 학습 · Firebase Authentication 사용 기준: 로그인 유지와 비밀번호 재설정 현재 글
  4. 필수 학습 · Firebase 보안 규칙 설계: Firestore와 Storage 권한 관리하기
  5. 필수 학습 · Firestore CRUD 사용법: 컬렉션 구조와 읽기 쓰기 흐름
  6. 필수 학습 · Firebase Auth Context 설계: 로그인 권한과 라우팅 관리하기
  7. 필수 학습 · Firebase Storage 이미지 업로드 사용법: 상품 이미지 관리 흐름 만들기
  8. 필수 학습 · Firebase Custom Claims 사용법: 관리자 권한 구분하기
  9. 필수 학습 · Firebase Functions v2 사용법: 트리거 배포 Secret 처리
  10. 필수 학습 · Firestore seed data 설계: 리뷰 더미 데이터 구조 잡기
  11. 선택 참고 · Firebase 배포 제외 파일 설정: firebase.json의 ignore 사용법
  12. 선택 참고 · Firebase Firestore 인덱스 삭제 질문 해결: 배포 중 안전하게 판단하기
  13. 선택 참고 · Firebase Auth unauthorized-domain 오류 해결: 로그인 도메인 설정 확인
  14. 선택 참고 · Firebase permission-denied 오류 해결: Firestore Rules 체크리스트
  15. 선택 참고 · Firebase Storage 이미지 오류 해결: 403·404·token·Rules 확인법
  16. 선택 참고 · Firebase CORS 오류 해결: Storage 이미지 업로드가 막힐 때 확인할 설정
  17. 필수 선수 · Firebase 실무 오류 해결 모음: Storage, Firestore, Auth 체크리스트
  18. 필수 학습 · Firestore undefined 오류 해결: 선택 필드가 저장을 막을 때
  19. 필수 학습 · Firestore arrayUnion 중첩 배열 오류: 배열을 그대로 넘기면 실패하는 이유

새 글 받아보기

RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.

RSS 피드 구독하기

댓글 남기기