Firebase 인증 규칙 (403에러)

·2024년 9월 30일
post-thumbnail

Firebase 에러

Firestore Database에서는 정상적으로 데이터가 업로드가 되는데 Storage에는 업로드가 되지 않는 이슈 발생

위와 같이 catch(err)로 콘솔을 찍으면 err.message가 console에 찍혔다.

FirebaseError : Firebast Storage : USer does not haver permission to access

대충 번역하자면 스토리지에 대한 권한이 없어 거절된다는 뜻

검색&Chat GPT의 힘을 빌렸는데 처음에는 Firebase에 대한 이해가 낮아서 해결하는데 생각보다 시간이 걸렸다.

문제는 Firebase Storage의 인증 에러 였다.



Firebase 인증

스토리지에 들어가면 상단에 규칙 을 클릭해서 들어가면 Firebase Storage 인증에 대한 규칙이 명시되어 있다.

rules_version = '2';

// Craft rules based on data in your Firestore database
// allow write: if firestore.get(
//    /databases/(default)/documents/users/$(request.auth.uid)).data.isAdmin;
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if false;
    }
  }
}

나의 최초값은 allow read, write: if false;
모든 읽기 쓰기의 값을 거절한다는 뜻이었다.

간단하게 false를 true로만 수정해도 읽기쓰기는 가능해진다.



Storage 접근 허용

  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if true;
    }
  }

하지만 해당구문은 파이어베이스의 모든 접근을 허용한다는 뜻이라 로그인을 하지않아도, 누구나 접근가능하다는 뜻이 된다. 물론 로그인을 하지 않을 시 Storage에 업로드 할 수 있는 페이지 라우팅을 막기는 했지만 확실한 권한 제어가 필요했다.



로그인한 인증된 사용자만 접근

  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }

해당 구문으로 수정하면 로그인을 한 인증된 사용자에게만 접근을 허락할 수 있다.



게시글을 작성한 본인만 접근 허용 가능

  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null && request.auth.uid == userId
    }
  }

이렇게 구문을 작성하면 로그인을 한 사용자만 접근 && 해당 유저아이디를 가진 사람만이 다시 Storage에 접근할 수 있도록 접근을 제한할 수 있다.



참고링크

profile
하고싶은거 짱많은 주니어 프론트엔드 개발자

0개의 댓글