Kakao API활용한 Social Login

On a regular basis·2021년 7월 25일
post-thumbnail

🍟 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가 나는데 그러면 에러야~!
profile
개발 기록

0개의 댓글