2023-07-03 TIL

0v0baek·2023년 7월 3일
1

TIL

목록 보기
88/92

카카오 소셜 로그인 시 undefined 오류

🚫 문제 발생

사이트에서 카카오 로그인 시도 시 undefined 오류가 발생한다.
근데 이게 모든 경우에 이런 문제가 발생하는 건 아니고 일부 아이디만 이런 오류가 발생하고 있다.

서버 로그를 살펴보자.

backend   | "GET /users/kakao/login/" 302 -
backend   | "GET /users/kakao/callback/?code=<코드>" 200 195
nginx     | <ip 주소> - - [03/Jul/2023:02:17:51 +0000] "GET /users/kakao/callback/?code=<코드> HTTP/1.1" 200 195 "https://barryjung.com/" "기기 정보" "ip 주소"
backend   | Bad Request: /users/kakao/login/finish/
backend   | 2023-07-03 11:17:51,891 WARNING  Bad Request: /users/kakao/login/finish/
backend   | <ip 주소> - - [03/Jul/2023:11:17:51] "POST /users/kakao/login/finish/" 400 77
nginx     | <ip 주소> - - [03/Jul/2023:02:17:51 +0000] "POST /users/kakao/login/finish/ HTTP/1.1" 400 77 "https://barryjung.com/" "기기 정보" "ip 주소"

이런식으로 callback 요청이 갔을 때 finish가 제대로 안되는 모양이다.

로컬 환경에서 확인해도 동일하게 로그인이 안됐다.

🔎 원인 찾기

먼저 로그인에 들어갔을 때 오류가 생기는 것 같아서 print문으로 확인해봤다.

class KakaoLogin(SocialLoginView):
    adapter_class = kakao_view.KakaoOAuth2Adapter
    client_class = OAuth2Client
    callback_url = CALLBACK_URI

    def post(self, request, *args, **kwargs):
        accept = super().post(request, *args, **kwargs)
        accept_status = accept.status_code

        if accept_status != 200:
            return JsonResponse({"message": "카카오 소셜 로그인 실패"}, status=accept_status)
            
        print(request.data)
        print(request.data["email"])
        user = User.objects.get(email=request.data["email"])

항상 저 User.objects.get(email=request.data["email"])에서 걸리길래 email이 잘 찍히는지 먼저 확인해봤다.

역시나 emailNone으로 넘어오고 있었다.
callback에서 이메일을 제대로 못 담아주는 듯 한데...

@api_view(["GET", "POST"])
def kakao_callback(request):
    ...
    profile_request = requests.get(
        "https://kapi.kakao.com/v2/user/me",
        headers={"Authorization": f"Bearer {access_token}"},
    )
    profile_json = profile_request.json()
    kakao_account = profile_json.get("kakao_account")

    email = kakao_account.get("email")
    
    print(profile_json)
    print(kakao_account)
    print(email)

callback 함수쪽에서 받아온 정보에 email이 제대로 담겨오나 확인해보자.

원인 발견!

애초에 email 정보가 안담겨져 오는데 그걸 get하려고 하니까 문제가 발생한거였다.

✅ 해결 방안

해결 링크

카카오쪽에서 이메일 정보를 필수 정보로 지정해서 보내려면 사업자번호가 필요하다!

사업자 번호가 없을 경우에는 버즈 채널을 만들어 등록해줘야지 카카오 이메일을 받아올 수 있다.

코드 자체에 문제는 없었던 것으로..

profile
개발 공부 하는 비전공자 새내기. 꾸준히 합시다!

0개의 댓글