ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 에러
    카테고리 없음 2022. 6. 15. 16:14

    1. firebase 웹앱 추가하고, 설정을 써주고 코드를 제대로 썼는데도 firebase 데이터 저장이 전혀 동작하지 않았다. default form submit event 막아주지 않아서 로그를 확인할 수 없어서 생긴 문제였다.

    회원가입 form 을 넘길 때 e.preventDefault(); 를 써주지 않았더니 firebase 가 동작하는지 아닌지 확인할 방법이 없었다. 로그가 firebase 진입 전에는 찍히는 데 진입 이후 성공했는지 여부가 안나왔던 것. form submit event 때문에 페이지가 바뀌어 버렸는데 e.preventDefault(); 를 써주니 firebase 에러 메시지가 나왔다. 

     

    에러 메세지:

    Error adding document:  FirebaseError: Missing or insufficient permissions.
    channelrequest.js:1086

    POST https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel?database=projects%2Fmovie-recap-a8084%2Fdatabases%2F(default)&VER=8&gsessionid=MOEDeoVrJwUHIdRk4acLR1i3hiW4ngcyOHFoGsoK9gk&SID=Bqy19e_nCUNvTElLNYNPvQ&RID=90235&TYPE=terminate&zx=6rtoc2y7yqrq net::ERR_BLOCKED_BY_CLIENT

     

    검색해보니 firebase firestore 규칙을 if true; 로 바꿔주면 되는 것

    rules_version = '2';
    service cloud.firestore {
      match /databases/{database}/documents {
        match /{document=**} {
          allow read, write: if true;
        }
      }
    }

    참조

     

    2. firebase 버전이 8 에서 9 로 업그레이드 되면서 코드를 작성할 때 compat 을 붙여줘야 한다. 아래와 같은 에러가 나왔다.

    ERROR in ./src/firebase.js 16:0-22
    export 'default' (imported as 'firebase') was not found in 'firebase/app' (possible exports: FirebaseError, SDK_VERSION, _DEFAULT_ENTRY_NAME, _addComponent, _addOrOverwriteComponent, _apps, _clearComponents, _components, _getProvider, _registerComponent, _removeServiceInstance, deleteApp, getApp, getApps, initializeApp, onLog, registerVersion, setLogLevel)

    ERROR in ./src/firebase.js 18:18-36
    export 'default' (imported as 'firebase') was not found in 'firebase/app' (possible exports: FirebaseError, SDK_VERSION, _DEFAULT_ENTRY_NAME, _addComponent, _addOrOverwriteComponent, _apps, _clearComponents, _components, _getProvider, _registerComponent, _removeServiceInstance, deleteApp, getApp, getApps, initializeApp, onLog, registerVersion, setLogLevel)

     

    export 'firebase' (imported as 'firebase') was not found in 'firebase/app'

     

    맨 처음 firebase 를 import 할 때 /compat/app 뿐 아니라 /compat/firestore 도 해줘야 한다

    import firebase from "firebase/compat/app";
    import "firebase/compat/firestore";

     

    3. 처음 setState 할 때 에러 setInput 에 빨간 줄 뜨면서 다음과 같은 에러가 뜨면서 undefined 내용이 나오면 initialState 값을 넣어줘야 한다

     

    Argument of type '{ id?: string | undefined; password?: string | undefined; passwordCheck?: string | undefined; name?: string | undefined; age?: number | undefined; address?: string | undefined; detailAddress?: string | undefined; }' is not assignable to parameter of type 'SetStateAction<ISignUp | undefined>'.
      Type '{ id?: string | undefined; password?: string | undefined; passwordCheck?: string | undefined; name?: string | undefined; age?: number | undefined; address?: string | undefined; detailAddress?: string | undefined; }' is not assignable to type 'ISignUp'.
        Types of property 'id' are incompatible.
          Type 'string | undefined' is not assignable to type 'string'.
            Type 'undefined' is not assignable to type 'string'.ts(2345)

     

    initialState 로 string 빈 값 넣어주면 undefined 뜨지 않아서 빨간 줄 사라진다

    const initialInput: ISignUp = {
      id: "",
      password: "",
      passwordCheck: "",
      name: "",
      age: 20,
      address: "",
      detailAddress: "",
    };
    
    export interface ISignUp {
      id: string;
      password: string;
      passwordCheck: string;
      name: string;
      age: number;
      address: string;
      detailAddress: string;
    }
    
    const initialCautions: ISignupCautions = {
      password: false,
      passwordCheck: false,
    };
    
    interface ISignupCautions {
      password: boolean;
      passwordCheck: boolean;
    }
    
    const SignUp = () => {
      const [input, setInput] = useState<ISignUp>(initialInput);
      const [cautions, setCautions] = useState<ISignupCautions>(initialCautions);
     

    댓글