🍟 kakao api를 활용한 social login 🍟
class KakaoLogInView(View):
def get(self, request):
try:
access_token = request.headers.get('Authorization', None)
#프론트에서 받아오는 토큰, "Authorization 키로 들어오는 값", 안들어오면 None / 그 값을 변수에 넣어줄거야
headers = {"Authorization" : f"Bearer {access_token}"} #근데 그 토큰은 헤더에 담겨 올거야
kakao_login_data = requests.get("https://kapi.kakao.com/v2/user/me", headers=headers).json()
#헤더에 담겨온 토큰을 가지고 카카오에 보내서 사용자 정보를 요청할거야(requests.get)
#그리고 응답이오면(사용자정보) 그건 json형태로 kakao_login_data 라는 변수에 담을거야
if not kakao_login_data:
return JsonResponse({'Message':"Invalid_token"}, status=401)
kakao_id = kakao_login_data['id']
#카카오가 보내준 정보에서, id값을 kakao_id에 담고
kakao_account = kakao_login_data['kakao_account']
#account값을 kakao_account에 담고
email = kakao_account['email']
#email값을 email에 담을거야
if not User.objects.filter(email=email).exists() and email is not None:
return JsonResponse({'Message':"Invalid_token"}, status=401)
watta_token = jwt.encode({'user_id' : kakao_id}, SECRET_KEY, algorithm=ALGORITHM)
#그러면 마지막으로 watta_token을 발급해줄건데, 그건 jwt형식으로 encode해서 발행할거야
return JsonResponse({'message' : 'SUCCESS', 'token' : watta_token}, status=200)
#return값으로 success message 보낼거고, watta_token 줄거야!
except json.JSONDecodeError:
return JsonResponse({"message": "JSONDecodeError"}, status=400)
#그렇지않으면 jsondecodeerror가 나는데 그러면 에러야~!