사이트에서 카카오 로그인 시도 시 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
이 잘 찍히는지 먼저 확인해봤다.
역시나 email
이 None
으로 넘어오고 있었다.
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
하려고 하니까 문제가 발생한거였다.
카카오쪽에서 이메일 정보를 필수 정보로 지정해서 보내려면 사업자번호가 필요하다!
사업자 번호가 없을 경우에는 버즈 채널을 만들어 등록해줘야지 카카오 이메일을 받아올 수 있다.
코드 자체에 문제는 없었던 것으로..