될때까지

((WnB)) 4일차 : Kakao Social API 본문

프로젝트/wecode2차 : WnB

((WnB)) 4일차 : Kakao Social API

랖니 2022. 8. 4. 23:06
728x90
import requests     
import json

from django.shortcuts   import redirect    # 새 창으로 이동
from django.http        import JsonResponse
from django.views       import View

from users.models import User
    
class KakaoSignUpView(View):
    def get(self, request):
        
        token = request.META.get('HTTP_AUTHORIZATION')        		# 프론트앤드가 보내준 요청의 헤더에 있는 AUTHORIZATION 값을 뽑는다.

        url    = 'https://kapi.kakao.com/v2/user/me'           		# 요청보내야하는 url (카카오 공식문서에 있음)
        header = {"Authorization" : f'Bearer ${token}'}		   		# header에 담아야하는 데이터

        response = requests.get(url, headers=header)           # requests를 사용하면 요청을 보낸다. 카카오 서버로 헤더에 토큰을 담아서 '요청'을 보낸다
        response = response.json()    						   # 받아온 응답을 json으로 변경하면
        
        kakao_id          = response['id']
        email             = response['kakao_account']['email']
        kakao_profile_img = response['kakao_account']['profile_image_url']   # 뽑을 수 있는 데이터만 추출
        
        if User.objects.get(kakao_id=kakao_id).exist():
            # 유저가 이미 존재한다면
            return redirect('메인화면 url')  # 메인 화면으로 이동
        
        # 존재하지 않을 때 여기로 온다
        # 프론트단에서 사용자가 이름/성/생일을 입력해야하니까 새창으로 이동시키는데
        # 저장한 kakao_id, email, kakao_profile_img를 담아서 이동시켜야한다.
        # 그리고 사용자가 입력하면 그 때 유저를 생성한다.
        # 데이터를 담아서 어떻게 보내지 안간다..
        return redirect('/users/test', kakao_id=kakao_id)

        
        # 최초가입자 카카오 로그인 => 우리회원 최초 로그인이네? db에 없어
        # 판단 후 
        # 회원정보를 입력하는 창으로 이동하고.
        # 저장 => create
        
        # null, default로 가입하고
        # 개인정보 페이지가 필요하네
        # 마이페이지에서 수정하도록

        return JsonResponse({'user_info' : 'test'})
    
class Test(View):
    def post(self, request):
    
    	# 프론트가 보내준 값 추출해서(쿼리파라미터? data에 담아서?)
        # first_name, last_name, phone_number, birth_day 저장하기
        
        User.objects.create(
            first_name = first_name,          
            last_name = last_name,      
            email = email,         
            kakao_id = kakao_id,      
            kakao_profile_img = kakao_profile_img,
            phone_number = phone_number,        
            birth_day = birth_day
        )
        
        return JsonResponse({'result':'제발되라'})

 

소셜로그인 카카오 API를 사용하기로 했다. 카카오 공식문서를 확인했을 때, 사용자의 이름/연락처/생년월일/이메일 등 다 가져올 수 있다고 분명히 봤었는데 오늘 다시보니까 가져올 수가 없다... ㅜㅜ!!!

null=True를 주면 되지만 아깝다... 입력값을 새 창으로 이동시켜서 거기서 값을 입력받으면 되지 않을까 싶다. 검색해보니 다른 창으로 이동은 redirect를 사용하면 된다. 하지만 User객체를 생성하기 위해 필요한 일부 데이터(카카오아이디, 카카오프로필 이미지)를 같이 넘겨줘야하고, 넘어간 사이트에서 프론트엔드로 요청을 보내서 응답을 받은 뒤에 응답에서 필요 데이터(이름, 연락처, 생년월일)를 뽑아서 유저객체를 만들어야한다. 근데 이게 가능한가...???/

728x90