Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- ReactNative
- 익명로그인
- Github-Actions
- Slack 알림
- Android SDK
- markerclusterer
- slack 배포 알림
- 보안
- 난독화
- slack-webhook
- Firestore
- firebaseauthentication
- firebase
- react native upgrade helper
- processterminated
- KaKaoMap
- 보안규칙
- React
- oncontentprocessdidterminate
- react-app-rewired
- react native 업그레이드
- 지도성능최적화
- React Native
- webview
Archives
- Today
- Total
작은프론트이야기
FirebaseError: Missing or insufficient permissions 에러 (feat. 익명 로그인 & 보안 규칙 설정) 본문
문제 해결
FirebaseError: Missing or insufficient permissions 에러 (feat. 익명 로그인 & 보안 규칙 설정)
돌핀코딩 2025. 4. 15. 10:41Next.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의 연동 여부다.
이번 경험을 통해 익명 인증 기반의 최소한의 보안 설정을 적용하면서도 사용자 접근이 가능한 구조를 만들 수 있었다.
참고자료
'문제 해결' 카테고리의 다른 글
React 프로젝트 보안 강화 난독화 및 소스코드 비노출 처리 (1) | 2025.05.21 |
---|---|
React Kakao Map에서 수천 개의 마커를 렌더링할 때 성능 최적화 (1) | 2025.05.09 |
React Native WebView Process Terminated 대응기 (1) | 2025.04.24 |
Gradle 8, SDK 34 대응을 위한 React Native 버전 업그레이드 (1) | 2025.04.21 |