작은프론트이야기

FirebaseError: Missing or insufficient permissions 에러 (feat. 익명 로그인 & 보안 규칙 설정) 본문

문제 해결

FirebaseError: Missing or insufficient permissions 에러 (feat. 익명 로그인 & 보안 규칙 설정)

돌핀코딩 2025. 4. 15. 10:41

Next.js로 개인 포트폴리오 사이트를 만들면서, 간단한 방명록(guestbook) 기능을 구현 했다.

Firebase의 Firestore를 사용하여 메시지를 저장하고 불러오는 구조였지만,

배포한 뒤 30일이 지난 후 다음과 같은 에러에 부딪혔다.

FirebaseError: Missing or insufficient permissions.

 

Firestore 접근이 차단된 이유와 이를 해결하기 위한 인증 연동 + 보안 규칙 설정 과정을 기록으로 남긴다.

 


Firestore의 테스트 모드 주의사항

Firestore Database를 처음 활성화하면 다음과 같은 “테스트 모드” 보안 규칙이 자동으로 설정된다.

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.time < timestamp.date(YYYY, MM, DD);
    }
  }
}

이 규칙은 Firestore 생성 시점 기준으로 30일 동안만 모든 사용자의 읽기/쓰기를 허용하는 임시 규칙이다.

주의: 30일이 지나면 Firestore에 접근할 수 없고, Missing or insufficient permissions 에러가 발생한다.
테스트 모드를 사용하는 경우에는 반드시 기간 내에 보안 규칙을 직접 설정해야 Firestore가 차단되지 않는다.

문제 상황

  • Firestore에 메시지를 저장하거나 조회할 때 위의 에러가 발생
  • 콘솔 로그: auth.currentUser === null
  • Firestore 규칙이 기본값으로 설정되어 있음 (비인증 사용자 접근 차단됨)

해결 과정

1. Firestore 보안 규칙 수정

Firebase 콘솔 → Firestore → Rules 탭에서 다음과 같이 설정

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /guestbook/{messageId} {
      allow read, write: if request.auth != null;
    }
  }
}

인증된 사용자만 guestbook 컬렉션의 문서를 읽고 쓸 수 있게 허용

 

2. Firebase Authentication: 익명 로그인 활성화

  • Firebase 콘솔 > Authentication > Sign-in method → "익명 로그인" 사용 설정

 

3. 클라이언트에서 익명 로그인 구현

import { getAuth, signInAnonymously } from 'firebase/auth';

const auth = getAuth(app);

if (typeof window !== 'undefined') {
  signInAnonymously(auth)
    .then((userCredential) => {
      console.log("익명 로그인 성공!", userCredential.user.uid);
    })
    .catch((error) => {
      console.error("익명 로그인 실패:", error);
    });
}

로그인 상태는 auth.currentUser?.uid 또는 onAuthStateChanged()로 추적 가능

 

4. Firestore 접근 성공

  • 익명 로그인 이후 인증된 상태로 guestbook 데이터 read/write 가능
  • 브라우저 콘솔에서 UID 확인 가능
  • 더 이상 Missing or insufficient permissions 에러 발생하지 않음

마무리하며

Firebase를 사용할 때 놓치기 쉬운 부분 중 하나는 Firestore 규칙과 Authentication의 연동 여부다.
이번 경험을 통해 익명 인증 기반의 최소한의 보안 설정을 적용하면서도 사용자 접근이 가능한 구조를 만들 수 있었다.


참고자료