[Django] oauth2 + 카카오 로그인하기

울상냥·2023년 3월 9일
0

Django

목록 보기
5/5

지난 글 에서는 allauth로 카카오 로그인을 진행하였는데 직접 oauth2 로그인을 구현해보았다.

카카오 로그인 api 동작방식과 카카오 애플리케이션 추가 과정은 지난 글에 있어서 생략하고..


urls.py

	path('accounts/kakao/login/callback/', v.kakao_login),

카카오에 등록해준 redirect uri를 path에 등록해 준다.

views.py

로그인

def kakao_login(request):

	#settings에 등록해둔 rest_api_key와 redirect_uri
    REST_API_KEY = getattr(settings, 'KAKAO_REST_KEY') 
    KAKAO_REDIRECT_URI = getattr(settings, 'KAKAO_REDIRECT_URI')

	# 인가코드 가져오기
    code = request.GET.get("code")

	# token 받아오기
    data = {'grant_type': "authorization_code", 'client_id': REST_API_KEY,
            'redirect_uri': KAKAO_REDIRECT_URI,
            'code': code}
    headers = {'Content-type': 'application/x-www-form-urlencoded;charset=utf-8'}

    token_response = requests.post('https://kauth.kakao.com/oauth/token', data = data, headers = headers)
    access_token = token_response.json().get('access_token')

	# token 검증하기
    headers = {"Authorization": f'Bearer {access_token}'}
    token_validate_response = requests.get('https://kapi.kakao.com/v1/user/access_token_info', headers = headers)
    print(token_validate_response.json())

	# 사용자 정보 받아오기
    headers = {"Authorization": f'Bearer {access_token}', 'Content-type': 'application/x-www-form-urlencoded;charset=utf-8'}
    user_info_response = requests.post('https://kapi.kakao.com/v2/user/me', headers = headers)
    print(user_info_response.json())

    return render(request, 'main.html')

로그아웃

def kakao_logout(request):

    REST_API_KEY = getattr(settings, 'KAKAO_REST_KEY')
    LOGOUT_REDIRECT_URI = getattr(settings, 'KAKAO_REDIRECT_URI')

	# 로그아웃 
    headers = {"Authorization": f'Bearer {access_token}'}
    logout_response = requests.post('https://kapi.kakao.com/v1/user/logout', headers=headers)
    print(logout_response.json())
    
    # 카카오계정과 함께 로그아웃
    logout_response = requests.get(f'https://kauth.kakao.com/oauth/logout?client_id=${REST_API_KEY}&logout_redirect_uri=${LOGOUT_REDIRECT_URI}')

자세한 내용은 카카오 api 에 아주 친절하게 설명이 나와있다.

삽질하면서 작성했던게 아까워서 블로그로 작성해두기.. 🥲

profile
안되면 되게하라

0개의 댓글