안녕하세요 oridori님! if (!admin.apps.length) { const config: Config = { credentials: { projectId: process.env.projectId || '', clientEmail: process.env.clientEmail || '', privateKey: process.env.privateKey?.replace(/\\n/g, '\n') || '', }, }; admin.initializeApp({ credential: admin.credential.cert(config.credentials), }); console.info('bootstrap firebase admin'); } 기존에 이 코드만 가지고 정상적으로 동작하는지 먼저 확인해보세요. 이 코드를 복수의 파일에서 import했을 때 initializeApp이 한번만 실행되고, 각자 동작을 잘 한다면 문제 없을꺼에요!
안녕하세요 oriori2705님! 작성해주신 코드 잘 동작할듯해요. admin에 앱이 있는지 체크하는 부분이 있잖아요. if (!admin.apps.length) { 다만, 이 코드는 require로 가져오도록 하는데요. 이게 여러 파일에 걸쳐있을 때, 어플리케이션이 실행되면 한번만 init 이 되는지 확인해봐야겠네요. 2번 질문은 admin.apps.length가 어떤 값을 가지는지 확인해보셔야할 듯하네요. if 문안에서 동작안한다면 if문 코드가 실행되지 않았을 가능성이 있어요.
https://blah-blah-one.vercel.app/api/messages.list?uid=cccodus313&page=1&size=10 이렇게 요청하면 {"message":"존재하지않는 사용자"} 이런 응답이 돌아와요. 지금 배포된 환경에서 데이터베이스에 제대로 접근하지 못하고 있는듯합니다. 코드가 아니라 환경변수를 .env 파일이랑 비교해보셔요.
네, 메시지 리스트니까 목록처럼 나와야겠죠. 디버깅 과정은 어제와 비슷합니다. 넘어간 uid가 올바른가? api 컨트롤러까지 응답이 잘 왔나? 잘 오지 않았다면 호출한 url이 유효한가? 잘 왔다면, 컨트롤러의 어느 지점에서 404로 반환하는가? 등의 과정으로 확인해보면 됩니다.
최종 확인 된 사항입니다. 첫 번째 문제는 접근하는 url에 아이디가 달랐어요. 만약 제 email이 totuworld 라면 ttotuworld 처럼 중간에 들어간게 조금 달라서 접근이 안된거였습니다. 두 번째 문제는 firebase auth 를 넘기는 초기값이 null인데요. 이게 undefined로 넘어가면서 발생했습니다. https://github.com/cccodus313/Blah-Blah/commit/d493f443e596a73c09966400f551d3e85651eae0#diff-568e8274da487c742d5bb3662960de2752a55e6921e2929d8c8f426cfa2068f9L7 export default function useFirebaseAuth() { const [authUser, setAuthUser] = useState (null); 위에 코드 처럼 되어있어야했어요! 이게 문제를 일으킨 이유는 아래 코드에서 null이 아니면 InAuthUser라고 생각하고 데이터에 접근하는데요. 초기값이 undefined였기 때문에 앞선 조건을 통과하고 .uid에 접근하니까 에러가 발생되었어요. const isOwner = authUser !== null && authUser.uid === userInfo.uid;
flat_white님 안녕하세요 :) 질문 너무 재미있네요. 맞습니다. 계속 하다보면 해결되는 부분이 있어요. 책을 읽을 때 모든 단어를 이해하고 읽지 않죠. 문맥을 통해 혹은 통밥으로 추측하고 넘어가다보면 전체 그림이 보입니다. 물론 그럼에도 이해되지 않는 부분은 나중에 찾아보면 됩니다. 이런 방법으로 학습하시길 기대했는데요. flat_white님이 그 부분을 정확히 짚어주셨네요.