KakaoDevelopers에 가서 APP 등록
사용자 동의 항목 체크 (Backend와 상의 후 어떤 정보를 저장할 것인지 선택)
토큰을 받을 수 있는 코드를 받아오기
Front에게 받은 사용자 토큰(Access Token)으로 해당 토큰의 사용자 정보 호출
Kakao 공식 가이드를 보면 Bearer {access_token} header
를 담은 요청을 보내라고 되어있는데, 어렵게 생각할 거 하나 없이 그냥 가이드대로 해주면 된다.
근데 나는 이게 무척 어려웠다. 그냥 가이드만 보고 무엇을 요청하거나 개발하는 것이
처음이였기 때문..
access_token = request.headers["Authorization"]
headers = ({'Authorization':f'Bearer {access_token}'})
kakao_url = 'https://kapi.kakao.com/v2/user/me'
response = requests.get(kakao_url, headers = headers)
이 이후에 또 사용자 정보 가져오는 데서 많이 헤맸는데,
처음에 값을 받아왔을 때 json 뭉탱이?로 와서 어떤게 누구의 Value인지 찾기 힘들었다.
그래서 json으로 온 뭉탱 아이들을 하나하나 해체했음.
Before
{
'id': 1004,'connected_at': '2021-04-01T08:25:00Z', 'properties': {'nickname': 'inah','profile_image':'http://k.kakaocdn.net/img_640x640.jpg','thumbnail_image':'http://k.kakaocdn.net/img_110x110.jpg'},
'kakao_account':{'profile_needs_agreement': False,'profile':
{'nickname': 'inah','thumbnail_image_url': 'http://k.kakaocdn.net/img_110x110.jpg','profile_image_url':'http://k.kakaocdn.net/img_640x640.jpg'},
'has_email': True, 'email_needs_agreement': True,'has_gender': True, 'gender_needs_agreement': True}}
해체쇼After
{
'id' : 1004,
'connected_at': '2021-04-01T08:25:00Z',
'properties': {
'nickname' : 'inah',
'profile_image' :'http://k.kakaocdn.net/img_640x640.jpg',
'thumbnail_image': 'http://k.kakaocdn.net/img_110x110.jpg'},
'kakao_account' : {
'profile_needs_agreement': False,
'profile' : {
'nickname': 'inah',
'thumbnail_image_url': 'http://k.kakaocdn.net/img_110x110.jpg', 'profile_image_url': 'http://k.kakaocdn.net/img_640x640.jpg'
},
'has_email': True,
'email_needs_agreement': True,
'has_gender': True,
'gender_needs_agreement': True
}
}
근데 친절히 공식문서에 나와있었음 ㅋㅋㅋㅋ 공식 문서 보는 것을 습관화 합시다.
카카오짱이시다.
이 글을 보는 여러분들은 이 key 값을 사용하십시오
예를 들어 user의 nickname과 email을 가져오고 싶다면,
user = response.json()
kakao_name = user['properties']['nickname']
kakao_email = user['kakao_account']['email']
이렇게 써주면 된당
이제 가져온 값을 조회하여 로그인 시키거나, 정보가 DB에 없다면 회원가입 시켜주면 끝
kakao_user, is_created = User.objects.get_or_create(kakao_id = user['id'])
if not is_created:
kakao_id = kakao_id,
name = kakao_name,
profile_image_url = kakao_profile_img
kakao_user.save()
return JsonResponse({
'message' : 'SUCCESS',
'access_token' : access_token
}, status=201)
코드 리뷰를 받은 후 get_or_create
를 처음 사용해봤는데
코드가 12줄 줄어들고 간결 of 간결 + 가독성 갑
넘나 마음에 든당 많이 많이 써머거야징
공식 문서만 보고 처음 개발했던 터라 처음엔 너무 막막했지만
지금 생각해보면 그렇게 뿌듯할 수가 없다🥺
역시 뭐든 처음이 어려운 법..
처음이 정말 어려웠던 UnitTest 블로깅은 다음에..🤞
덕분에 카카오 로그인 인증 했습니다 감사합니다.