인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

slslsl님의 프로필 이미지

작성한 질문수

[플러터플로우] 실전! 앱 출시를 위한 끝장 노하우!

[SDK] 웹에서 테스트하기

카카오로그인SDK 질문

작성

·

66

·

수정됨

0

안녕하세요. 저는 createCustomToken 에러 로그가 이렇게 뜹니다. 분명 처음부터 끝까지 영상 그대로 했는데 왜그런걸까요? user collection등도 다 활성화 되어있는 상태입니다.

createCustomToken

jdu0e5j7y993

TypeError: Cannot read properties of undefined (reading 'user')

at /workspace/create_custom_token.js:21:21

at /workspace/node_modules/firebase-functions/lib/common/onInit.js:33:16

at AsyncLocalStorage.run (node:async_hooks:338:14)

at /workspace/node_modules/firebase-functions/lib/v2/trace.js:18:37

at cloudFunction (/workspace/node_modules/firebase-functions/lib/v1/providers/https.js:53:78)

at /layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/function_wrappers.js💯29

at process.processTicksAndRejections (node:internal/process/task_queues:77:11)

GPT한테 물어보면,

이 Cloud Function은 onRequest를 사용하고 있고, 데이터를 request.body.data로 받도록 작성되어 있습니다. 그런데 실제 요청에서는 request.body에 직접 user 객체가 있거나, data가 빠져있을 가능성이 높습니다. 라고 합니다.
GPT가 수정해주는 코드나 밑에 인프런에의 수정코드로 다 해도 DEPLOY부터 실패하네요~~도와주실 수 있으실까요?

답변 2

0

씈코치님의 프로필 이미지
씈코치
지식공유자

안녕하세요.

받은 데이터를 로그 출력해보면 뭔가가 나올 것 같은데요.

 

createCustomToken 함수 초반에 로그 찍는 부분이 있습니다.

    functions.logger.log(
      `# createUser request: ${JSON.stringify(request.body)}`,
    );

firebase console 에서 이 부분이 어떻게 나왔는지 공유 가능할까요?

로그를 공유해주신다면 도와드리기 수월할 것 같습니다.

감사합니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. slslsl님, createCustomToken 함수에서 발생한 오류와 관련하여 도움을 드리겠습니다.

오류 핵심 요약

해당 오류는 createCustomToken 함수 내에서 요청(request) 객체의 구조와 관련된 문제로 인해 발생하는 것 같습니다. 이 문제는 Cloud Function에서 request.body.data에 접근하려고 할 때, 실제로 data 객체가 존재하지 않아서 발생합니다.

해결 방법

이 문제를 해결하기 위해 다음 단계를 시도해 보세요:

  1. Cloud Function 코드 검토:

    • createCustomToken 함수에서 request.body.data가 아닌, request.body 또는 request.body.user 형태로 요청을 받을 수 있도록 코드를 수정해 보세요.

    • 예를 들어, 아래와 같이 수정할 수 있습니다:

      exports.createCustomToken = functions.https.onRequest(async (request, response) => {
       const user = request.body.user; // request.body.data 대신 request.body.user 사용
       if (!user) {
           return response.status(400).send('User data is required.');
       }
      
      
       // 사용자 토큰 생성 로직
      });
      
    • request.body.user가 실제로 요청에서 전달되는지를 확인하세요. 필요한 경우 로그를 추가하여 전달된 데이터 구조를 확인하는 것도 유용합니다.

  2. 테스트 요청 검토:

    • 테스트 시 사용하신 요청의 본문 구조를 확인해 보세요. 예를 들어, 사용자 정보를 요청할 때는 다음과 같은 형식으로 데이터를 전달해야 합니다:
      
      {
       "user": {
           "uid": "user123",
           "email": "user@example.com"
       }
      }
      

  3. 로그 추가:

    • Cloud Function에서 적절한 로그를 추가하여 실제 요청 데이터를 파악하세요. 이렇게 하면 어디에서 데이터가 누락되고 있는지 쉽게 식별할 수 있습니다.

유사한 문제 해결 사례

아래 링크에서 다른 사용자가 유사한 문제를 해결한 경험을 확인할 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

slslsl님의 프로필 이미지

작성한 질문수

질문하기